2015-05-11 2 views
1

Как изменить фон ячейки XtrsGrid (GridControl) после того, как его значение было обновлено/изменено/отредактировано?VB.NET XtraGrid Изменить цвет ячеек после изменения его значения

Могу ли я сделать это в следующем случае:

AddHandler grdView.RowCellStyle, AddressOf grdView_RowCellStyle 

Но это меняет цвет всей сетки клеток.

Private Sub grdView_RowCellStyle(sender As Object, e As RowCellStyleEventArgs) 
    e.Appearance.BackColor = Color.Blue 
End Sub 

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

ответ

1

Я, наконец, смог сделать это следующим образом!

  1. вам нужно обрабатывать два события:
    • GridView.CellValueChanged
    • GridView.CustomDrawCell
  2. Вы должны следить за показателями каждого изменённые клетки. Итак, нам нужен Список

Создайте класс и три поля в нем.

Public Class UpdatedCell 
    'UC means UpdatedCll 
    Public Property UCFocusedRow As Integer 
    Public Property UCFocusedColumnIndex As Integer 
    Public Property UCFieldName As String 

    Public Sub New() 
    UCFocusedRow = -1 
    UCFocusedColumnIndex = -1 
    UCFieldName = String.Empty 
    End Sub 

End Class 

Инициализировать список в вашей функции Form1_Load.

Public lst As List(Of UpdatedCell) = New List(Of UpdatedCell)() 

Теперь в GridView.CellValueChanged случае, выполните следующие действия:

Private Sub grdView_CellValueChanged(sender As Object, e As DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs) 

    Dim currCell As New UpdatedCell 
    currCell.UCFocusedRow = e.RowHandle 
    currCell.UCFocusedColumnIndex = e.Column.AbsoluteIndex 
    currCell.UCFieldName = e.Column.FieldName 

    lst.Add(currCell) 

End Sub 

Теперь, сделайте следующее GridView.CustomDrawCell события:

Private Sub grdView_CustomDrawCell(sender As Object, e As RowCellCustomDrawEventArgs) 

    Dim prevColor As Color = e.Appearance.BackColor 

    For Each c As UpdatedCell In lst 
     If e.RowHandle = c.UCFocusedRow And 
     e.Column.AbsoluteIndex = c.UCFocusedColumnIndex And 
     e.Column.FieldName = c.UCFieldName Then 

      e.Appearance.BackColor = Color.Yellow 

     Else 
      If Not e.Appearance.BackColor = Color.Yellow Then 
       e.Appearance.BackColor = prevColor 
      End If 

     End If 
    Next 

End Sub 

Обратите внимание, что аргумент e As RowCellCustomDrawEventArgs содержит всю необходимую информацию. Нам просто нужно заботиться об отредактированных индексах ячеек, потому что GridView.CustomDrawCell вызывает каждый раз, когда изменяется фокус строки/столбца.

Посмотрите результат.

Перед enter image description here

И После enter image description here

ПРИМЕЧАНИЕ, что желтые клетки имеют различные значения, которые я изменил с помощью встроенного/INPLACE редактора.

С благодарностью

Смежные вопросы