我编写的一个小型winform应用程序在表单上有一个数据绑定数据网格视图。它绑定到数据表。用户可以更改datagridview中显示的数据,然后单击“保存”按钮以更新基础数据库。我使用dataTable.AcceptChanges()
语句执行此操作。
我想实现'撤消'功能,以便在更新后,用户改变主意,他们可以通过点击撤消按钮撤消更改。
我原以为我只是将原始数据的副本加载到datagridview中,并在用户进行更改后将其与基础数据进行比较。因此,当“原始”数据与更新后的数据存在差异时,我只是使用原始数据中的内容更新数据库。我希望这是有道理的。
但我的问题是,这是否是一个好主意?我想,保留原始数据的副本并使用它来撤消所做的更改似乎很简单,我只是想知道是否有其他方法/机制来执行此操作。
该程序使用模型构建数据库 - 首先使用Entity Framework。
答案 0 :(得分:4)
如果您打算将undo
作为会话实施,只要SqlConnection
仍然有效。
您可以使用SqlConnection.BeginTransaction()
创建Transaction Point
,然后如果您只想丢弃数据(撤消),请拨打Rollback()
或Dispose()
或永久保存数据在Commit()
SqlTransaction
方法
有关如何实施的方法。 。
启动交易()/创建SavePoint
每次用户发出Save
命令时,请创建SavePoint()
(您可以将其推送到Stack
每次执行撤消命令时,弹出SavePoint名称并进行回滚。
从实体框架的角度来看。 。
在您调用SaveChanges()
方法之前,所有更改都是本地更改,让用户根据需要进行尽可能多的更改,并且仅在需要永久更改时才执行SaveChanges()
。