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

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

(.Net)DataGridViewのCellFormattingイベント発生タイミングにやられた

(.Net)バインドされたDataGridViewでソートするとセルの色が元に戻るで、セルの値に基づいてDataGridViewのスタイルを変更するにはCellFormattingを使うべきだ と書きました。

ところが、CellFormattingイベントでは対応できない場面が出てきました。

問題となるのは、スタイル変更の判定元となるセルが横スクロールしないと表示されないようなグリッドの場合です。

その場合、そのセルがスクロールされて表示されないと CellFormatting が走らないため初期段階では背景色が変わりません。

列を先頭に持ってきてもいいがそうはできないので、下記のように対応しました。

private void RowStyleChange_Disable()

{

if (FilterTypeValue == Utility.FilterType.UserSearch) return;

foreach (DataGridViewRow item in dgvChild.Rows)

{

if ((bool)item.Cells["Disable"].Value == true){

item.DefaultCellStyle.BackColor = Color.Red;

}else{

item.DefaultCellStyle.BackColor = null;

}

}

}

 

//バインドしたときにスタイル変更

private void dgvChild_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)

{

RowStyleChange_Disable();

}

結局CellFormattingイベントで処理するのをやめて、バインドしたときとソート後に手動(RowStyleChange_Disableメソッド呼び出して)で背景変更するようにしました。