У меня есть элемент управления 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 ведет себя так странно или предлагает лучший способ сделать это, они получат согласиеОТВЕТ!