突出显示DataGridView行

时间:2016-09-09 11:35:23

标签: vb.net datagridview cell-formatting

我想根据值突出显示DataGridView行。如果值已经过验证,则为绿色,如果不是则为红色 当细胞之前没有被格式化时,我得到绿色和红色。但是,当我返回到绿色行并更改其未经验证的值时,一个单元格不会变为红色。它保持绿色 见图:
1)没有任何条目
enter image description here
2)输入验证值
enter image description here
3)退回并输入错误值
enter image description here
正如您所看到的,只有第一个单元格是红色的,但我希望整行是红色的。
我在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

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

2 个答案:

答案 0 :(得分:1)

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

enter image description here

这样的事情应该适合你。

Number.isFinite(Infinity);  // false
Number.isFinite(NaN);       // false

答案 1 :(得分:0)

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

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

该行:

Me.dgvItems.DefaultCellStyle.SelectionBackColor = SystemColors.Highlight

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