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