У меня есть элемент управления DataGridView с
dgridView.DataSource = QueryCustomers(LastName) // return IList from LINQtoSql
Я использую следующее для изменения Row BackColor:
Private Sub dgridView_OnPrePaint(ByVal sender As System.Object, ByVal e As DataGridViewRowPrePaintEventArgs) Handles dgridView.RowPrePaint
Dim dgridRow As DataGridViewRow = dgridView.Rows(e.RowIndex)
Select Case dgridRow.Cells("Status").Value
Case "Alpha"
dgridRow.DefaultCellStyle.BackColor = Color.LightGreen
Case "Beta"
dgridRow.DefaultCellStyle.BackColor = Color.LightGreen
Case "Terminated"
dgridRow.DefaultCellStyle.BackColor = Color.Salmon
Case Else
If currentColor = Color.White Then
dgridRow.DefaultCellStyle.BackColor = Color.Silver
Else
dgridRow.DefaultCellStyle.BackColor = Color.White
End If
currentColor = dgridRow.DefaultCellStyle.BackColor
End Select
End Sub
Кажется, это работает, за исключением того, что при определенных запросах DataGridView будет продолжать мерцать, пока я не отредактирую строку и не сохраню. Редактирование выполняется двойным щелчком по одной из строк, в результате чего WinForm отображается поверх главной формы, содержащей DataGridView. После сохранения данных и изменения данных в сетке данных мерцание прекращается.
Есть ли лучший способ покрасить строки? Я не хочу повторять DataGridView каждый раз, когда что-то меняется. Похоже, что подписка на событие RowPrePaint будет то, что нужно сделать. Нужно ли подписываться на RowPostPaint?
ПРИМЕЧАНИЕ: ответы могут быть C # или VB.Net.