1

我想根据值突出显示 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

任何帮助表示赞赏。谢谢。

4

2 回答 2

1

在 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
于 2016-12-07T19:30:26.127 回答
0

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

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

该行:

Me.dgvItems.DefaultCellStyle.SelectionBackColor = SystemColors.Highlight

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

于 2016-09-09T11:48:02.827 回答