Как получить цвет задней части DataGridView для изменения - PullRequest
0 голосов
/ 18 марта 2011

У меня есть элемент управления 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.

1 Ответ

1 голос
/ 13 марта 2013

Это может быть слишком поздно ... но я бы предпочел, чтобы вы выполняли форматирование после того, как сетка будет заполнена данными с циклом для каждой строки сетки.

Вроде так:

  for each dr as datagridviewrow in me.dgridrow.rows
       'condition for each row based on cell's input is put here
      if  dgridRow.Cells("Status").Value = "Alpha" then
          dr.defaultcellstyle.backcolor = color.lightgreen
      end if
   next

Да ... надеюсь, что поможет кому-нибудь в будущем ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...