【问题标题】:Undoing All Changes Since BindingSource's last EndEdit call撤消自 BindingSource 的最后一次 EndEdit 调用以来的所有更改
【发布时间】:2009-08-03 19:31:29
【问题描述】:

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

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

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

【问题讨论】:

  • 我遇到了类似的问题,所以我很想看看你是否能得到一个好的答案。我的解决方法是直接在 DataRowView 对象上调用 EndEdit()。
  • 在DataRowView上调用时,DataRowState会变成什么?它仍然是添加的,还是已修改或未更改?

标签: c# .net data-binding ado.net bindingsource


【解决方案1】:

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

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

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

【讨论】:

  • 对,问题是我只有在数据持久化到数据库时才调用Adapter.Update()。
  • 我想我必须做的是在用户开始编辑操作之前保留我自己的每一行的临时副本,如果它们“取消”,则将值写回该行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-05
  • 1970-01-01
  • 2016-12-07
  • 1970-01-01
  • 2011-06-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多