从BindingSource的最后一次EndEdit调用后撤消所有更改

Dov*_*Dov 5 .net c# data-binding ado.net bindingsource

这是场景(使用绑定到DataSet中的DataTable的BindingSource):

  1. 用户创建新的地址簿联系人,填写数据绑定控件中的名字和姓氏.
  2. 他按下Apply,其事件处理程序调用BindingSource.EndEdit().
  3. 然后他意识到有一个错误,并添加了一个电子邮件地址.
  4. 但是当他按下Apply时,验证失败(电子邮件格式无效),因此不会调用EndEdit().
  5. 他决定不进行编辑,并按下取消按钮,其事件处理程序调用BindingSource.CancelEdit().
  6. 但是,BindingSource不是仅使用名字和姓氏而没有电子邮件恢复到新联系,而是取消了整个记录.

自上次调用EndEdit()以来,有没有办法只撤消操作?我的印象是,CancelEdit()应该是如何工作的.

Hen*_*man 3

作为解释,DataTable 仅保存记录的 2 个状态:原始状态和当前状态。您的请求需要多个州。

为了实现您想要的效果,您应该将更改刷新到数据库(例如 Adapter.Update(table))以响应成功的应用。这会将您的“当前”提升为“原始”,而下一个“取消”可以回退到原始状态。

但这可能符合也可能不符合您的要求。