DataGridViewRow.DefaultCellStyle Форматирование
У меня есть этот код на RowValidating
событие DataGridView
:
private void dgvSrc_RowValidating(object sender, DataGridViewCellCancelEventArgs e)
{
DataGridView dgv = sender as DataGridView;
if (dgv.Rows[e.RowIndex].Cells["fullPath"].Value.ToString().Equals("none"))
dgv.Rows[e.RowIndex].DefaultCellStyle.ForeColor = Color.Red;
else
dgv.Rows[e.RowIndex].DefaultCellStyle.ForeColor = Color.Black;
}
Это работает, но не автоматически, вам нужно сосредоточиться или нажать сначала, а затем выбрать другую строку, чтобы увидеть, если его ForeColor
изменяется как красный. Я пытался с помощью Update
а также Refresh
это не автоматически форматирует определенную строку. Как я могу это исправить?
3 ответа
Использовать CellFormatting
событие DataGridView
dgv.CellFormatting += dgv_CellFormatting
Обращайся как
void dgv_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if(dgv.Rows[e.RowIndex].Cells["fullPath"].Value.ToString().Equals("none"))
dgv.Rows[e.RowIndex].DefaultCellStyle.ForeColor = Color.Red;
else
dgv.Rows[e.RowIndex].DefaultCellStyle.ForeColor = Color.Black;
}
Вы можете сделать это в вашем событии dgv RowPrePaint..
Private void dgvSrc_RowPrePaint(object sender, DataGridViewCellCancelEventArgs e)
{
DataGridView dgv = sender as DataGridView;
if (dgv.Rows[e.RowIndex].Cells["fullPath"].Value.ToString().Equals("none"))
dgv.Rows[e.RowIndex].DefaultCellStyle.ForeColor = Color.Red;
else
dgv.Rows[e.RowIndex].DefaultCellStyle.ForeColor = Color.Black;
}
Вы подписываетесь на неправильное событие. Я думаю, вам нужно это: CellValueChanged