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();
}

Windows窗体:刷新绑定只对添加的项起作用,对更新的项不起作用

您应该使用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);
}