VB.NET XtraGrid Change cell color after its value is edited

前端 未结 1 732
故里飘歌
故里飘歌 2021-01-24 07:18

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:

AddHandle         


        
相关标签:
1条回答
  • 2021-01-24 07:19

    I finally managed to do it in the following way!

    1. you need to handle two events:
      • GridView.CellValueChanged
      • GridView.CustomDrawCell
    2. You need to keep track of every changed cell's indices. So, we need a List

    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 enter image description here

    And After enter image description here

    NOTE that yellow cells have different values that I changed using inline/inplace editor.

    Thanks

    0 讨论(0)
提交回复
热议问题