4

我有一个简单的 web 表单,上面有几个字段和一个 gridview。我还有一个保存和取消按钮。

我想要一种方法来撤消用户按下取消时对表单上的数据所做的操作。这对于字段来说很简单,但是由于对 gridview 的更改是针对数据库实时发生的,所以我不知道如何获得撤消功能。

我曾考虑在视图状态中存储对 gridview 的更改,但我宁愿不这样做,因为需要额外的空间。

我还想到了一个临时表来存储更改然后根据需要回滚它们。

有谁知道如何从表单中获取撤消功能?

4

4 回答 4

2

将所有数据保存在会话对象中,并在准备好时将其写入数据库。如果您抽象数据层,您可以使用与会话对象交互的 ObjectDataSource。

我目前在电子商务网站的结帐系统上使用此方法。我将数据存储在模仿数据库模式的自定义对象中。

于 2008-10-01T23:36:05.027 回答
1

最简单的解决方案是在用户单击“保存”按钮之前,不要将 gridview 中的更改提交到数据库。

如果您确实决定使用视图状态或类似的方式来记录稍后将撤消的更改,请不要忘记采取与进行初始更改时相同的预防措施:更新冲突。

于 2008-10-01T23:38:37.110 回答
0

一种方法是将对表的更改与时间戳和该应用程序实例的标识符一起存储在另一个表中。如果您想撤消自特定时间以来的更改,您只需向后遍历列表直到该标识符的该日期。

于 2008-10-01T23:33:30.960 回答
0

嗯...将数据对象加载到会话中并从(MyObject)Session["MyObject"]对象绑定控件。我相信您可以连接到 ObjectDataSource 以使用会话......然后您可以覆盖更新事件,以便将更改写入会话。

当用户单击保存时,获取会话对象并保存它们:MyObject obj = (MyObject)Session["MyObject"]; MyObject.Save()

它不会给你多个级别的撤消......虽然我猜你可以保存多个会话对象,如果你真的需要的话。

于 2008-10-01T23:53:46.200 回答