我想根据值突出显示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
任何帮助表示赞赏。谢谢。
答案 0 :(得分:1)
在DataGridView的属性上,查找Focus> RowValidating,如下图所示。
这样的事情应该适合你。
Number.isFinite(Infinity); // false
Number.isFinite(NaN); // false
答案 1 :(得分:0)
如果您想要重新格式化整行,请使用RowValidating
事件处理程序。
如果您想通过验证重新设置单个单元格,请使用CellValidating
该行:
Me.dgvItems.DefaultCellStyle.SelectionBackColor = SystemColors.Highlight
对整个网格的默认单元格样式产生全局影响,因此请在Load
上设置这些更改,然后让您的事件处理程序执行条件格式设置。