【发布时间】:2014-09-21 12:21:38
【问题描述】:
我有以下情况,我在一个表单上有多个控件。用户可以选择编辑模式,允许他们修改控件的内容(文本框、复选框、组合框等)。编辑完成后,用户可以选择“保存”或“取消”按钮。
显然点击保存将保存对数据库的所有更改,但是,如果用户点击取消,我想“以某种方式”将所有控件恢复到之前的状态。
目前,当用户单击取消时,表单会关闭编辑模式,但控件会保留所做的所有更改,直到重新加载表单。
有没有简单的方法解决这个问题,还是每次用户点击取消时我都需要从数据库中重新加载整个表单内容?
提前致谢。
【问题讨论】:
-
从数据库重新加载数据是个问题吗?当然,这只涉及执行您的表单初始化代码,对吧?
-
不是真正的问题。但是来自数据库的初始加载会在表单上填充大量数据(包括不可编辑的数据),当用户单击取消时,我只需要重新加载其中的一部分。如果没有简单的方法解决这个问题,我要么必须将我的加载序列分成两部分,要么每次都重新加载整个内容。我只是想在采用此解决方案之前先提出问题。
-
我想您可以在用户编辑控件时将控件标记为已修改,并且只重新加载该控件的数据?或者,也许您可以创建控件的副本,或者创建一个实际副本,或者拥有一个存储 id 和文本值的类,在列表中管理这些值,然后遍历列表并将值设置回您将 ID 存储在列表中?这是我能想到的最简单的方法。
-
这是一个很好的理由,不要将代码埋在事件中。如果你有一个
DisplayCustomer过程,它可以很容易地从表单加载中调用;但是对于 UnDo 或在本例中为 Cancel,您只需再次调用它以显示以前的值。 -
您的控件是否与对象的属性进行数据绑定?使用 CSLA.NET 并在底层对象上调用 CancelEdit 怎么样?