目录
问题
在使用BindingList作为DataGridView的数据源时,当BindingList<>有增加或者删除的时候DataGridView会自动刷新,但是当BindingList<>中属性内容进行更新的时候界面并不会刷新
解决方法一
使用
this.dataGridView.Invalidate();
强制刷新。
解决方法二
使用BindingList绑定时,数据确实双向同步改变,但刷新并不会实时更新,是因为实体类没有实现INotifyPropertyChanged接口,实现相关接口即可。
dataGridView中没有及时刷新显示新数据。因为数据修改时并没有通知到控件,为此实现INotifyPropertyChanged接口,该接口只包含一个事件,当属性值改变时,触发该事件,从而导致注册该事件的方法被执行,达到通知控件的目的。这是通过事件实现观察者模式。
关键代码在VO实体对象时,当改变值时,抛出PropertyChanged事件
class ProcedureNameVo : INotifyPropertyChanged
{
/// <summary>
/// 存储过程名
/// </summary>
public string procedureName { get; set; } = "存储过程名(英文)";public bool _isExist = false;
/// <summary>
/// 存储过程是否存储
/// </summary>
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对象,可以定点更新
对表格数据量小的使用方法一。精细化的使用方法二。