【问题标题】:Need To Revert Multiple Controls Back To Previous Values需要将多个控件恢复到以前的值
【发布时间】:2014-09-21 12:21:38
【问题描述】:

我有以下情况,我在一个表单上有多个控件。用户可以选择编辑模式,允许他们修改控件的内容(文本框、复选框、组合框等)。编辑完成后,用户可以选择“保存”或“取消”按钮。

显然点击保存将保存对数据库的所有更改,但是,如果用户点击取消,我想“以某种方式”将所有控件恢复到之前的状态。

目前,当用户单击取消时,表单会关闭编辑模式,但控件会保留所做的所有更改,直到重新加载表单。

有没有简单的方法解决这个问题,还是每次用户点击取消时我都需要从数据库中重新加载整个表单内容?

提前致谢。

【问题讨论】:

  • 从数据库重新加载数据是个问题吗?当然,这只涉及执行您的表单初始化代码,对吧?
  • 不是真正的问题。但是来自数据库的初始加载会在表单上填充大量数据(包括不可编辑的数据),当用户单击取消时,我只需要重新加载其中的一部分。如果没有简单的方法解决这个问题,我要么必须将我的加载序列分成两部分,要么每次都重新加载整个内容。我只是想在采用此解决方案之前先提出问题。
  • 我想您可以在用户编辑控件时将控件标记为已修改,并且只重新加载该控件的数据?或者,也许您可​​以创建控件的副本,或者创建一个实际副本,或者拥有一个存储 id 和文本值的类,在列表中管理这些值,然后遍历列表并将值设置回您将 ID 存储在列表中?这是我能想到的最简单的方法。
  • 这是一个很好的理由,不要将代码埋在事件中。如果你有一个DisplayCustomer 过程,它可以很容易地从表单加载中调用;但是对于 UnDo 或在本例中为 Cancel,您只需再次调用它以显示以前的值。
  • 您的控件是否与对象的属性进行数据绑定?使用 CSLA.NET 并在底层对象上调用 CancelEdit 怎么样?

标签: vb.net controls undo


【解决方案1】:

我只是在这里概述一个可能的解决方案。

您可以在表单中有一个字典,当用户第一次修改控件时,您可以在其中存储控件的内容,并按控件名称对其进行索引。

当用户开始修改控件时,您检查该控件是否已存在于字典中。如果不是,则使用当前控件的值向字典中添加一个新条目。

如果用户取消编辑过程,您可以遍历字典,通过名称(Form.Controls(ControlName) 或我认为的类似名称)在表单中找到每个控件,将其值设置回原来的值并删除字典中的条目。

这不是最优雅的解决方案,因为它将涉及将所有控件链接到 TextChanged 事件或等效项以在修改它们时捕获它们的值...

为避免这种情况,您可以在加载表单时在开始时填写字典,在从数据库中填充值之后,然后仅将那些在用户取消时具有不同值的控件的值设置回来。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-13
    • 2021-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-13
    相关资源
    最近更新 更多