我将此代码附加在DataGridView
的RowValidating
事件上:
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
,不自动格式化特定行。我该如何解决这个问题?
使用DataGridView
的CellFormatting
事件
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;
}
您订阅了错误的事件。我认为,你需要这个cellvaluechange
您可以在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;
}