DataGridView解决使用BindingList时属性改变界面不更新问题 |
您所在的位置:网站首页 › 怎么刷新datagridview › DataGridView解决使用BindingList时属性改变界面不更新问题 |
目录
问题 解决方法一 解决方法二 问题在使用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 |