Reputation: 4569
How can I change the XtrsGrid's (GridControl) cell background after its value has been updated/changed/edited?
Can I do it in following event:
AddHandler grdView.RowCellStyle, AddressOf grdView_RowCellStyle
But this changes the color of whole Grid cells.
Private Sub grdView_RowCellStyle(sender As Object, e As RowCellStyleEventArgs)
e.Appearance.BackColor = Color.Blue
End Sub
EDIT: I need to turn every cell color change whenever a cell value is changed.
Upvotes: 1
Views: 2397
Reputation: 4569
I finally managed to do it in the following way!
GridView.CellValueChanged
GridView.CustomDrawCell
Create a class and three fields in it.
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
Initialize the list in your Form1_Load
function.
Public lst As List(Of UpdatedCell) = New List(Of UpdatedCell)()
Now, in GridView.CellValueChanged
event, do the following:
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
Now, do the following in GridView.CustomDrawCell
event:
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
Note that the argument e As RowCellCustomDrawEventArgs
contains all required information. We just need to care of edited cells indices because GridView.CustomDrawCell
calls every time row/column focus is changed.
See the result.
Before
And After
NOTE that yellow cells have different values that I changed using inline/inplace editor.
Thanks
Upvotes: 1