突出显示 DataGridView 行

Highlighting DataGridView Row

我想根据值突出显示 DataGridView 行。如果值经过验证则显示绿色,否则显示红色。
当单元格之前没有格式化时,我得到绿色和红色。但是,当我回到绿色行并更改其未验证的值时,一个单元格不会更改为红色。它保持绿色。
看图片:
1)没有任何条目

2) 输入验证值

3)返回输入错误值

正如您所看到的,只有第一个单元格是红色的,但我希望整行都是红色的。
我在 CellValidating 事件中格式化单元格。这是代码:

Private Sub dgvItems_CellValidating(sender As Object, e As DataGridViewCellValidatingEventArgs) Handles dgvItems.CellValidating
    If e.ColumnIndex = ValueColumnIndex Then
        If Not ValidateValue(e.FormattedValue) Then
            Me.dgvItems.Rows(e.RowIndex).DefaultCellStyle.BackColor = Color.LightPink
            Me.dgvItems.DefaultCellStyle.SelectionBackColor = Color.LightPink
            Me.dgvItems.DefaultCellStyle.SelectionForeColor = Color.Black
            e.Cancel = True
        Else
            Me.dgvItems.DefaultCellStyle.SelectionBackColor = SystemColors.Highlight
            Me.dgvItems.DefaultCellStyle.SelectionForeColor = SystemColors.HighlightText
            Me.dgvItems.Rows(rowIndex).DefaultCellStyle.BackColor = Color.LightGreen
            Me.dgvItems.Rows(rowIndex).DefaultCellStyle.ForeColor = Color.Black
        End If
    End If
End Sub

感谢任何帮助。谢谢。

如果您想要重新格式化整行,请使用 RowValidating 事件处理程序。

如果您想通过验证重新设置单个单元格的样式,请使用 CellValidating

行:

Me.dgvItems.DefaultCellStyle.SelectionBackColor = SystemColors.Highlight

对整个网格的默认单元格样式具有全局影响,因此在 Load 上设置这些更改,然后让您的事件处理程序执行您的条件格式设置。

在 DataGridView 的属性中,查找 Focus > RowValidating,如下图所示。

像这样的东西应该适合你。

Sub DataGridView1_RowValidating(ByVal sender As Object, ByVal e As DataGridViewCellCancelEventArgs)

   Dim drv As DataRowView
   Dim c As Color
     If drv.Item("Gender").ToString = "M" Then
       c = Color.LightBlue
     Else
       c = Color.Pink
     End If
     e.CellStyle.BackColor = c

End Sub