DataGridView解决使用BindingList时属性改变界面不更新问题

您所在的位置:网站首页 怎么刷新datagridview DataGridView解决使用BindingList时属性改变界面不更新问题

DataGridView解决使用BindingList时属性改变界面不更新问题

2023-08-17 20:01| 来源: 网络整理| 查看: 265

 

 

目录

 

 问题

解决方法一

解决方法二

 问题

在使用BindingList作为DataGridView的数据源时,当BindingList有增加或者删除的时候DataGridView会自动刷新,但是当BindingList中属性内容进行更新的时候界面并不会刷新

解决方法一

使用

this.dataGridView.Invalidate();

强制刷新。

解决方法二

使用BindingList绑定时,数据确实双向同步改变,但刷新并不会实时更新,是因为实体类没有实现INotifyPropertyChanged接口,实现相关接口即可。

dataGridView中没有及时刷新显示新数据。因为数据修改时并没有通知到控件,为此实现INotifyPropertyChanged接口,该接口只包含一个事件,当属性值改变时,触发该事件,从而导致注册该事件的方法被执行,达到通知控件的目的。这是通过事件实现观察者模式。

关键代码在VO实体对象时,当改变值时,抛出PropertyChanged事件

class ProcedureNameVo : INotifyPropertyChanged         {             ///             /// 存储过程名             ///             public string procedureName { get; set; } = "存储过程名(英文)";

            public bool _isExist = false;             ///             /// 存储过程是否存储             ///             public bool isExist {                 get                 {                     return _isExist;                 }

                set {                     if (_isExist != value)                 {                         _isExist = value;                     PropertyChanged(this, new PropertyChangedEventArgs("isExist"));                 }                 }             }             public event PropertyChangedEventHandler PropertyChanged = delegate { };         }

 比如上面代码当改变isExist时,界面会实时刷新,当改变procedureName值时不会刷新,是因为改变isExist值时,抛出的事件。

 

总结

方法一相对简单,每次手动刷新界面,每次调用是全局刷新

方法二稍微复杂点,要重构vo对象,可以定点更新

对表格数据量小的使用方法一。精细化的使用方法二。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3