「これはヤバかったな」という遅刻エピソード

よろしくお願いいたします。
vb2008を勉強しております。

DataGridViewにデータを表示し、
横列の背景色の変更を考えております。

For i As Integer = 0 To .RowCount - 1
  .Rows(i).DefaultCellStyle.BackColor = Color.Red
Next i

と記述しておりますが、背景色が変わりません。

RowsをCulumsに変えれば縦列の色は変わります。
AlternatingRowsDefaultCellStyle.BackColorを利用すれば横列でも色が変わることは確認できました。

http://oshiete1.goo.ne.jp/qa4495913.html
この方の質問を参考にLoad内に記述しております。


ちがう点は、
親フォームから子フォーム呼び出し、
子フォームのLoad内に記述しております。

<親Form>
子form.MdiParent = Me
子form.Show()

<子Form>
Loadイベント内にDataGridView.Rows(i).DefaultCellStyle.BackColor=~

としております。
いつ指定するかの問題と予想したのですが、アドバイスをお願いします。
お時間がありましたら、よろしくお願いいたします。

A 回答 (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

この回答への補足

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回実行する事は悪いことなのでしょうか?

補足日時:2010/02/15 15:23
    • good
    • 0
この回答へのお礼

自分一人ではコンストラクタ内で実行することを思いつきませんでした。
korin_様、見て頂いた皆様、ありがとうございました。

お礼日時:2010/02/18 01:26

こんにちは。


こちらの環境では、提示されているコードで正常に動作しました。

デバッグで確認して欲しいのですが、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
これを実行することで逃げております。

よろしくお願いいたします。

補足日時:2010/02/15 14:22
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報