Событие CellFormatting
- не лучший вариант в вашем случае. Ваш цикл for заставляет вас многократно повторять свои данные.
Вы можете использовать события RowPrePaint
, RowPostPaint
или DataBindingComplete
для своего сценария.
Использование RowPrePaint
позволит вам раскрасить строку и оставить открытой опцию, чтобы применить дополнительные стили уровня ячеек для отдельных ячеек.
private void dataView_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e)
{
DataGridViewRow row = dataView.Rows[e.RowIndex];
if (Convert.ToInt32(row.Cells[2].Value) == 1)
{
row.DefaultCellStyle.BackColor = Color.Orange;
}
else
{
row.DefaultCellStyle.BackColor = Color.White;
}
}
Если вы решите сохранить цикл, вы можете использовать событие DataBindingComplete
.
private void dataView_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
foreach (DataGridViewRow row in dataView.Rows)
{
int value = Convert.ToInt32(row.Cells[2].Value);
if (value == 1)
{
row.DefaultCellStyle.BackColor = Color.Orange;
}
else
{
row.DefaultCellStyle.BackColor = Color.White;
}
}
}