5

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

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

自上次调用 EndEdit() 以来,有什么方法可以仅撤消操作?我的印象是 CancelEdit() 应该如何工作。

4

1 回答 1

3

作为解释,DataTable 仅保存记录的 2 个状态,即 Original 和 Current。您的请求将需要多个状态。

为了实现您想要的,您应该刷新对数据库的更改(例如 Adapter.Update(table))以响应成功的应用。这会将您的 Current 提升为 Original,而下一次 Cancel 可以退回到该状态。

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

于 2009-08-03T19:59:28.973 回答