3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。(jehupc.exblog.jpから移転中)

(.Net)DataGridViewセルスタイルの優先順位

最初 DataGridView でセルの値によって背景変更する処理をしていました。

例えばTrueなら背景色を付け、Falseならスタイルを無しする下記のような感じです。(C#)

//row は DataGridViewRow オブジェクト

if ((bool)row.Cells["Column1"].Value == true){

row.DefaultCellStyle.BackColor = Color.Red;

}else{

row.DefaultCellStyle.BackColor = SystemColors.WindowText;

}

で、それから下記のように列(Column1)の背景色を設定しようとしたができませんでした。

DataGridView1.Columns["Column1"].DefaultCellStyle.BackColor = Color.Honeydew;

どうやら、スタイルの設定には優先順位があるようです。

優先順位については、dobon:DataGridViewにセルスタイルを設定するで書かれていました。

つまり先にセルスタイルが優先されるので、この場合後から列スタイルを設定しても意味が無かったようです。

しかも今回 row.Cells["Column1"] が false ならセルスタイルを解除したいのになぜか SystemColors.WindowText を指定しているのも問題でした。

この場合、CellStyleにnullを指定してやればいいようです。

こうすると、row.Cells["Column1"] が false のときは、Color.Honeydew 背景色が Color.Honeydew となります。(下記コード参照)

//スタイルをnullにするとスタイル解除となる。

if ((bool)row.Cells["Column1"].Value == true) {

row.DefaultCellStyle.BackColor = Color.Red;

} else {

//row.DefaultCellStyle.BackColor = SystemColors.WindowText;

row.DefaultCellStyle = null;

}