- ベストアンサー
vb2008でのDefaultCellStyleの反映について
- vb2008でのDefaultCellStyleの設定が正しく反映されない現象について説明します。
- DataGridViewの行の背景色を変更するために、DefaultCellStyleを設定しましたが、実際には背景色が変わりません。
- RowsをColumnsに変えることで縦列の色は変わりますが、横列の色は変わりません。AlternatingRowsDefaultCellStyle.BackColorを利用すれば横列の色も変えることができます。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
確かに、下記のコードを Form_Load に記述すると背景色が変更されないようですね。 この部分だけをコンストラクタ(Sub New)に記述することは出来ないのですか? <子フォーム(Form2)のLoad内> Using adapter As New SqlClient.SqlDataAdapter("SELECT * FROM tbl_TEST", My.Settings.dbConnectionString) Dim myDataSet As New DataSet() adapter.Fill(myDataSet) DataGridView1.DataSource = myDataSet.Tables(0) End Using
その他の回答 (1)
- korin_
- ベストアンサー率69% (46/66)
こんにちは。 こちらの環境では、提示されているコードで正常に動作しました。 デバッグで確認して欲しいのですが、DataGiedView.RowCountは正しく表示されていますか? 予想ですが、DataGridView.Rows(i).DefaultCellStyle.BackColor=~の記述の後に DataGridView.DataSource を指定していませんか? その場合は DataSource を指定した後に BackColor を変更するようにしてください。 それでも解決しない場合は、問題の切り分けをするために現象が再現出来る最小限のコードを提示してもらえますか?
補足
korin_様、ご回答ありがとうございます。 ご指摘頂きました件ですが、 DataGiedView.RowCountは正しく表示されます。 DataGiedView.(0, i).Valueでも中身は表示されます。 また、 DataGridView.DataSourceの後に、.BackColor指定を行っております。 SDIにすれば色は変わるのは確認できております。 <親フォームのLoad内> Me.IsMdiContainer = True Dim f2 As New Form2 f2.MdiParent = Me f2.Show() <子フォーム(Form2)のLoad内> Using adapter As New SqlClient.SqlDataAdapter("SELECT * FROM tbl_TEST", My.Settings.dbConnectionString) Dim myDataSet As New DataSet() adapter.Fill(myDataSet) DataGridView1.DataSource = myDataSet.Tables(0) End Using For i As Integer = 0 To DataGridView1.RowCount - 1 DataGridView1.Rows(i).DefaultCellStyle.BackColor = Color.blue Next i とすると色が変更されません。 現状では、Form2上のボタン押下にて For i As Integer = 0 To DataGridView1.RowCount - 1 DataGridView1.Rows(i).DefaultCellStyle.BackColor = Color.blue Next i これを実行することで逃げております。 よろしくお願いいたします。
お礼
自分一人ではコンストラクタ内で実行することを思いつきませんでした。 korin_様、見て頂いた皆様、ありがとうございました。
補足
korin_様ご回答ありがとうございます。 Sub New内にてDataGridViewを表示し、Load内にて背景色の変更を実行しましたところ、正しく表示できました。 実際にはDataGridViewの表示と背景色変更は同時に実行する為、 また、何度かDataGridViewの内容を更新する為、 dataGridViewLoad()でまとめてあります。 Private Sub dataGridViewLoad() Using adapter As New SqlClient.SqlDataAdapter("SELECT * FROM tbl_TEST", My.Settings.dbConnectionString) Dim myDataSet As New DataSet() adapter.Fill(myDataSet) DataGridView1.DataSource = myDataSet.Tables(0) End Using For i As Integer = 0 To DataGridView1.RowCount - 1 DataGridView1.Rows(i).DefaultCellStyle.BackColor = Color.blue Next i End Sub これをNewとLoadで2回実行すると背景色が変更されました。 どちから1回ではだめでした。 こういった表示する為に2回実行する事は悪いことなのでしょうか?