DevExpress GridView 单元格修改标记

这篇博客介绍了如何在GridView中通过监听CellValueChanged和CellValueChanging事件,利用辅助类GridViewHelper来标记已修改过的单元格。当单元格值变化时,记录原始值和位置信息,然后在RowCellStyle事件中根据集合中的记录来改变单元格背景色,表示已修改。当值恢复为初始值时,取消标记。提供了一个具体的调用示例和通用类实现。
摘要由CSDN通过智能技术生成

关于GridView单元格值修改后,需要标记成已经修改了

 演示:

大概逻辑:

可以设置单元格的背景色表示已经修改过,一般设置单元格的背景色我们采用的是GridView的RowCellStyle事件,判断行索引和列进而设置单元格的背景色即可,需要准备工作就是需要在单元格改变值的时候去记录改变值的单元格的行索引和列信息,然后再RowCellStyle事件中判断行索引和列信息是否存在集合当中,(单元格值改变,我们可以采用CellValueChanged事件来记录所改变的单元格信息),如果单元格值恢复到最初始值,可以取消这个标记,这里就需要用到CellValueChanging事件,在值改变之前记录初始值和行索引、列信息,并且在CellValueChanged事件里判断修改后的值是否跟初始值相同,如果相同,则从集合中移除掉,就相当于取消标记。

废话不多说,直接上代码,提供了GridViewHelper的帮助类,和SignGridViewCellValueChanged静态方法,只需要传入GridView对象和标记的颜色参数即可

 调用示例:

 GridViewHelper. SignGridViewCellValueChanged(gridView1, Color.Yellow);//可以在构造函数或者Load事件里面直接调用

通用类:

public  class GridViewHelper
    {
        public static void SignGridViewCellValueChanged(DevExpress.XtraGrid.Views.Grid.GridView view, Color color)
        {
            var list = new List<Cell>();
            view.CellValueChanging += (s, e) =>
            {
                var entity = list.Find(p => p.RowIndex == e.RowHandle && p.FieldName == e.Column.FieldName);
                if (entity == null)
                {
                    list.Add(new Cell(e.RowHandle, e.Column.FieldName, view.GetRowCellValue(e.RowHandle, e.Column)));//记录修改的索引和初始值
                }
            };
            view.CellValueChanged += (s, e) =>
            {
                var entity = list.Find(p => p.RowIndex == e.RowHandle && p.FieldName == e.Column.FieldName);
                if (entity != null)
                {
                    if (entity.OriginValue == e.Value || entity.OriginValue.Equals(e.Value))
                    {
                        list.Remove(entity);//如果值是数据的初始值,就取消标记
                    }
                }
            };
            view.RowCellStyle += (s, e) =>
            {
                if (list.Any(p => p.RowIndex == e.RowHandle && p.FieldName == e.Column.FieldName))//判断是索引是否存在集合中,存在则设置标记
                {
                    e.Appearance.BackColor = color;
                }
            };
        }
      public  class Cell
        {
            public Cell(int row, string fieldName, object value)
            {
                RowIndex = row;
                FieldName = fieldName;
                OriginValue = value;
            }
            public int RowIndex { get; set; }
            public string FieldName { get; set; }
            public object OriginValue { get; set; }
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值