我有一个 datagridview 控件,我需要根据每行中的一个单元格中的值对行进行着色。我正在使用 CellFormatting 事件,如下所示:
Private Sub DGDisplay_CellFormatting(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles dgDisplay.CellFormatting
Dim intRowIndex As Integer = e.RowIndex 'This is zero when sorting.....
Dim CurrentRow As DataGridViewRow = dgDisplay.Rows(intRowIndex)
Dim strTestValue As String = CurrentRow.Cells("Status").Value
Select Case UCase(strTestValue)
Case "WARNING"
CurrentRow.DefaultCellStyle.BackColor = Color.PeachPuff
Case "ERRMESSAGE"
CurrentRow.DefaultCellStyle.BackColor = Color.Salmon
End Select
End Sub
当网格加载和滚动等时,这工作正常。但是当我单击列标题对网格进行排序时,e.RowIndex 始终为零,并且所有行都获得第一行的格式......
为什么当网格排序时这不起作用?
编辑:Joakim 是在正确的轨道上,但以下代码工作正常:
Private Sub dgDisplay_CellPainting(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellPaintingEventArgs) Handles dgDisplay.CellPainting
If e.RowIndex < 0 Then
Exit Sub
End If
Dim intRowIndex As Integer = e.RowIndex
Dim CurrentRow As DataGridViewRow = dgDisplay.Rows(intRowIndex)
Dim strTestValue As String = CurrentRow.Cells("Status").Value
Select Case UCase(strTestValue)
Case "WARNING"
CurrentRow.DefaultCellStyle.BackColor = Color.PeachPuff
Case "ERRMESSAGE"
CurrentRow.DefaultCellStyle.BackColor = Color.Salmon
End Select
End Sub
出于某种原因, e.RowIndex 在这里设置正确,但在其他方法上没有设置。您在这里唯一需要担心的是它可以是-1。但是当我尝试使用其他方法时,包括 PrePaint,我不得不处理它总是在排序时出现零。如果我排除零的情况,就像我排除了否定的情况一样,那么第一行总是白色的!!!疯狂...我不确定为什么会这样,但确实如此。它也不会产生超出我使用 CellFormatting 事件的闪烁。
如果有人能解释 e.RowIndex 行为如此奇怪的原因或提供更好的方法,他们将得到公认的答案!