我终于设法通过以下方式做到了!
- 您需要处理两个事件:
GridView.CellValueChanged
GridView.CustomDrawCell
- 您需要跟踪每个更改的单元格的索引。所以,我们需要一个列表
在其中创建一个类和三个字段。
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。
查看结果。
之前
和之后
注意黄色单元格具有不同的值,我使用内联/就地编辑器更改了这些值。
谢谢