tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルDataGridのセルに色を付ると表示がおかしい
記事No7104
投稿日: 2008/03/01(Sat) 11:25
投稿者
いつもお世話になります。

環境: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, "表示データ")

このような経験をお持ちの方はいらっしゃいますでしょうか?
もしいらっしゃり、対処法をご存知の方がいらっしゃいましたら
ご教授願えませんでしょうか?

わかりにくい説明で申し訳ありませんが、よろしくお願いします。

不明な点がありましたら、ご指摘ください。

[ツリー表示へ]
タイトル自己可決しました(^^;
記事No7105
投稿日: 2008/03/01(Sat) 14:14
投稿者
色を付けるべき、セルのRowNoとBalckColor、ForeColorの配列を
実際のデータ数でReDimしたら直りました。

お騒がせして、申し訳ありませんでした。

[ツリー表示へ]