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

Другие вопросы по тегам