(.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メソッド呼び出して)で背景変更するようにしました。