【问题标题】:How to preserve BindingSource EndEdit() revert changes?如何保留 BindingSource EndEdit() 还原更改?
【发布时间】:2020-05-13 09:03:42
【问题描述】:

我有简单的细节编辑表格。

从数据库中读取数据。 DataAdapter 填充 DataTable 和 Dataset 我已经创建了 BindingSource (bs) 并将所有控件绑定到 bs

在保存到数据库之前调用 bs.EndEdit()(为了反映数据源中所有更改的控件值)

一切都很好,除了由约束导致错误的情况(例如列不能为 NULL,或者需要唯一值)。

在这种情况下,bs.EndEdit() 会导致异常(什么可以),但也会恢复所有更改(我觉得不可以...)。所以我最终会丢失用户输入的所有数据(没有机会解决问题)

我一定做错了什么 - 有人可以建议如何正确处理这种情况吗?

【问题讨论】:

    标签: winforms data-binding bindingsource


    【解决方案1】:

    为了使其工作,BindingSource 的底层数据对象必须实现 IEditableObject:

    参考 MSDN #1:

    当调用 EndEdit 方法时,所有待处理的更改都将应用于 底层数据源。

    此方法无效,除非数据包含的对象 源码实现IEditableObject接口。

    参考 MSDN #2:

    IEditableObject 接口定义命名空间:System.ComponentModel 程序集:System.ComponentModel.dll 提供提交功能 或回滚对用作数据源的对象的更改。

    干杯

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-23
      • 2016-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多