トップ回答者
DataGridの一行おきの色について

質問
-
いつも参考にさせていただいています。
vb.net2005でWindowsアプリケーションを作成しています。
下記のような記述でDataGridViewを使ってデータを表示させようと考えています。
DataGridView1.AlternatingRowsDefaultCellStyle.BackColor = Color.Aqua
DataGridView1.Columns(1).DefaultCellStyle.BackColor = Color.DimGray
'
DataGridView1.Rows.Add()
DataGridView1.Item(0, 0).Value = "aaa"
DataGridView1.Item(1, 0).Value = "bbb"
DataGridView1.Item(2, 0).Value = "ccc"
DataGridView1.Rows.Add()
DataGridView1.Item(0, 1).Value = "ddd"
DataGridView1.Item(1, 1).Value = "eee"
DataGridView1.Item(2, 1).Value = "fff"ここで、AlternatingRowsDefaultCellStyleとDefaultCellStyleを指定した場合、Color.Aqua(横の色)が常に表示されて、
Color.DimGray(縦の色)が切れたように見えます。
これを逆にColor.DimGray(縦の色)が常に表示されて、Color.Aqua(横の色)が切れるように表示させることはできない
でしょうか。
よろしくお願いします。
回答
-
trapemiya様、えムナウ様
返信ありがとうございます。
まずは、CellFormattingイベントで下記のように書くことで思っていた表現が可能でした。
If Me.DataGridView1.Columns(e.ColumnIndex).Name = "Column2" Then
e.CellStyle.BackColor = Color.DimGray
End If今回は仕様でどうしても縦の色が目立つようにしたかったのですが、えむナウ様が書いておられるように、
「Microsoftが思う優先度」にあわせることが、見た目の統一性になるかもしれませんので、通常の場合は、
この優先度にしたがってみようと思います。
すべての返信
-
このページをご覧ください。
http://msdn2.microsoft.com/ja-jp/library/1yef90x0(VS.80).aspx#sectionSection2
CellStyleがどのような優先度で適用されるかを描いた図です。
上にあるほうが優先度が高い状態になります。
この場合はAlternatingRowsDefaultCellStyleがDataGridViewColumn.DefaultCellStyle よりも優先度が高いので、
DataGridViewColumn.DefaultCellStyle が負けて縦の色が切れたように見えます。
つまりMicrosoftが思う優先度と違うことが問題となります。
AlternatingRowsDefaultCellStyleの勝つようにするにはDataGridViewRow.DefaultCellStyle、DataGridViewCell.Styleを使わなくてはいけません。
DataGridView1.Columns(1).DefaultCellStyle.BackColor = Color.DimGray をやめて、
データをセットした後に以下のように回してやります。
例えば for で 0 から DataGridView1.Rows.Count までの 全Rowの 該当 Column の DataGridView1.Item の、
CellStyle.BackColor を設定してやればいいことになります。
これはデータが追加されるごとに追加された分必要になります。
データが追加されるごとにやるのが嫌ならDataGridView.CellPaintingイベントなどを使ってやる方法もあります。
DataGridView.CellFormatting イベントでもいいかもしれません。
-
trapemiya様、えムナウ様
返信ありがとうございます。
まずは、CellFormattingイベントで下記のように書くことで思っていた表現が可能でした。
If Me.DataGridView1.Columns(e.ColumnIndex).Name = "Column2" Then
e.CellStyle.BackColor = Color.DimGray
End If今回は仕様でどうしても縦の色が目立つようにしたかったのですが、えむナウ様が書いておられるように、
「Microsoftが思う優先度」にあわせることが、見た目の統一性になるかもしれませんので、通常の場合は、
この優先度にしたがってみようと思います。