タイトル | : DataGridのセルに色を付ると表示がおかしい |
記事No | : 7104 |
投稿日 | : 2008/03/01(Sat) 11:25 |
投稿者 | : K |
いつもお世話になります。
環境:WinXP+SP2/VB.net2003/.NET Framework1.1+SP1
DataGridの列の幅をユーザーが変更できないようにする http://dobon.net/vb/dotnet/datagrid/lockcolumnwidth.html 上記URLを参考にし、行と列の幅を変更できなくし、さらに 列のヘッダをクリックしても、ソートできないDataGridを 作成しました。
このDataGridに対し、一部の列に下記URLを参考にし、色を付ける 列があります。 DataGridのセルに色を付ける http://blog.livedoor.jp/it_ikiru/archives/50109940.html このURLの派生クラスでは、1つの列に1色しか設定できないのを 行毎に色設定をできるように修正し使っています。
その他の列の一部では下記URLを参考にし、ComboBoxを使用しています。 これはそのまま修正を加えず使っています。 DataGridでComboBoxを使う http://dobon.net/vb/dotnet/datagrid/datagridcombobox.html
上記の状態で、DataGridにデータを表示した時色付けをする列で 1行目のデータだけ、データが表示されません。 (実際にはちゃんとDataGridのセルにデータが入っています) カーソルを合わせると入力文字が反転し表示されます。 DataGridには42個の列があり、行も0〜100程度あります。 スクロールさせると、色付けをする列の1行目だけ直前に その場所に表示されていたデータが表示されます。 色付けをする列の1行目だけ、反転表示のままになる事もあります。 というように色付けをする列の1行目だけ、表示がおかしくなります。 1行目の色付けをしない列はきちんと表示されています。 2行目から下は全てのデータがきちんと表示されています。
私の方では、色付けをする列が日付型だったのを文字列型にしたり、 ComboBoxと競合(?)かと思いComboBoxを外して見たり、 丁度DataGridの切れ目(一番右)だったので、切れ目(一番右)に ならないようにしたりしましたが解決できませんでした。 セルに色付けをしないようにすると、きちんとデータが表示されます。
これは、セルに色を付けるために作った派生クラスのバグなんでしょうか? それとも、もっと他の問題なのでしょうか?
FormにDataGirdを作成し、データを1項目抽出し表示するソース これでも再現します。
Dim oleCn As New OleDb.OleDbConnection Dim oleCmd As OleDb.OleDbCommand Dim oleCn2 As New OleDb.OleDbConnection Dim oleCmd2 As OleDb.OleDbCommand Dim tblStyle As New DataGridTableStyle Dim clmStyle As MyDataGridTextBoxColumns Dim dAdp1 As OleDb.OleDbDataAdapter Dim dSet1 As DataSet = New DataSet("表示データ") Dim SQLCmd, DataBase As String Dim _Line(1) As Integer Dim _Color(1) As Color
_Line.Clear(_Line, 0, 0) _Color.Clear(_Color, 0, 0) 'データベースの格納場所を取得 DataBase = "データベースの格納場所"
'データベース定義 oleCn.ConnectionString = _ "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & DataBase & ";" & _ "Persist Security info=False"
'データベースオープン oleCn.Open()
'データを検索 SQLCmd = "select 項目A " & _ "from テーブル " dAdp1 = New OleDb.OleDbDataAdapter(SQLCmd, oleCn) dAdp1.Fill(dSet1, "表示データ") tblStyle.MappingName = "表示データ" clmStyle = New MyDataGridTextBoxColumns clmStyle.MappingName = "項目A" clmStyle.HeaderText = "項目A" clmStyle.NullText = "" clmStyle.SetRowNum = _Line clmStyle.CellBackColor = _Color clmStyle.CellForeColor = _Color tblStyle.GridColumnStyles.Add(clmStyle)
DataGrid2.TableStyles.Add(tblStyle) DataGrid2.SetDataBinding(dSet1, "表示データ")
このような経験をお持ちの方はいらっしゃいますでしょうか? もしいらっしゃり、対処法をご存知の方がいらっしゃいましたら ご教授願えませんでしょうか?
わかりにくい説明で申し訳ありませんが、よろしくお願いします。
不明な点がありましたら、ご指摘ください。
|