残念ながら、私はあなたの問題に対する完全な解決策を見つけることができず、回避策しか見つけられませんでした。
MSDNの例を使用してCellFormattingイベントを実験した結果、表示されているものが正確に表示されました。BackColor
これは明確に設定されていましたが、CellStyle
それを反映していませんでした。1
私が見つけた回避策は、DataGridViewCellFormattingEventArgs
CellStyle
プロパティを使用せず、代わりにグリッドに直接移動することでした。これには、セルをフォーマットしたくない場合を手動で処理する必要があるという欠点があります。
これを示すいくつかのコードが以下にあります-これもMSDNコードを変更しているだけです:
void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
// If the column is the Artist column, check the
// value.
if (this.dataGridView1.Columns[e.ColumnIndex].Name == "Artist")
{
if (e.Value != null)
{
// Check for the string "pink" in the cell.
string stringValue = (string)e.Value;
stringValue = stringValue.ToLower();
if ((stringValue.IndexOf("pink") > -1))
{
// With the commented line below we cannot access the new style
//e.CellStyle.BackColor = Color.Pink;
// With this line we can!
dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Style.BackColor = Color.Pink;
}
else
{
// With the original MSDN code the else block to reset the
// cell style was not needed.
dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Style.BackColor = dataGridView1.DefaultCellStyle.BackColor;
}
}
}
}
1.私の理論では、これは、この方法について人々が抱く混乱に似ています。この.Refresh()
方法では、DataGridView
画面に描かれた長方形と基礎となるデータの2つの非常に異なるビューがあります。長方形を再描画するだけの.Refresh()
方法では、データを更新しません。これはそのようなものだと思います。CellFormatting
イベントはペイント中にのみフォーマットされ、グリッドスタイル自体には何もしません。