none
DataGridの一行おきの色について RRS feed

  • 質問

  • いつも参考にさせていただいています。

    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(横の色)が切れるように表示させることはできない

    でしょうか。

    よろしくお願いします。

    2007年7月6日 1:24

回答

  • trapemiya様、えムナウ様

    返信ありがとうございます。

     

    まずは、CellFormattingイベントで下記のように書くことで思っていた表現が可能でした。
     If Me.DataGridView1.Columns(e.ColumnIndex).Name = "Column2" Then
         e.CellStyle.BackColor = Color.DimGray
     End If

    今回は仕様でどうしても縦の色が目立つようにしたかったのですが、えむナウ様が書いておられるように、

    「Microsoftが思う優先度」にあわせることが、見た目の統一性になるかもしれませんので、通常の場合は、

    この優先度にしたがってみようと思います。

    2007年7月9日 0:28

すべての返信

  • CellFormattingイベントで、e.CellStyle.BackColorに指定すれば良いと思います。
    2007年7月6日 8:31
    モデレータ
  • このページをご覧ください。

    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 イベントでもいいかもしれません。

    2007年7月7日 19:51
  • trapemiya様、えムナウ様

    返信ありがとうございます。

     

    まずは、CellFormattingイベントで下記のように書くことで思っていた表現が可能でした。
     If Me.DataGridView1.Columns(e.ColumnIndex).Name = "Column2" Then
         e.CellStyle.BackColor = Color.DimGray
     End If

    今回は仕様でどうしても縦の色が目立つようにしたかったのですが、えむナウ様が書いておられるように、

    「Microsoftが思う優先度」にあわせることが、見た目の統一性になるかもしれませんので、通常の場合は、

    この優先度にしたがってみようと思います。

    2007年7月9日 0:28
  •  

    回答済みはご自分の投稿につけるのではなくて、

    参考になった投稿につけてください。

     

    #この掲示板システムが分かりにくいということで、

    #気にすることないですよ。

    2007年7月9日 6:37