Windows窗体:刷新绑定只对添加的项起作用,对更新的项不起作用
本文关键字:起作用 更新 不起作用 窗体 绑定 Windows 添加 刷新 | 更新日期: 2023-09-27 18:15:42
我想创建一个撤销按钮:
private void btn_Undo_Click(object sender, EventArgs e)
{
m_storesBS.DataSource = _storeRepository.GetAll();
StoresBindingNavigator.BindingSource.ResetBindings(false);
}
当我添加一个项目然后按下撤销按钮时,这个效果很好。
但是,如果我通过改变文本框的值来编辑一个项目,并按下撤销按钮,文本框(详细视图)和网格视图(概述)中的值不会重置。
网格视图和文本框都连接到绑定源(m_storesBS
)
我尝试更改GetAll方法的列表类型,但没有成功:
public virtual BindingList<T> GetAll()
{
return _objectSet.ToBindingList();
}
您应该使用BindingList<YourType>
将数据绑定到控件。然后,更改将被反映出来,而不需要任何额外的工作。
问题是EF缓存我的整个列表(_storeRepository.GetAll();
)。
我现在在我的存储库中使用了一个名为Refresh的方法。
public void Refresh(T entity, bool storeWins = true)
{
_objectContext.Refresh(
storeWins ? RefreshMode.StoreWins : RefreshMode.ClientWins, entity);
}
撤销按钮:
private void btn_Undo_Click(object sender, EventArgs e)
{
var store = GetCurrentStore();
_storeRepository.Refresh(store);
StoresBindingNavigator.BindingSource.ResetBindings(false);
}