读书人

如何样实现撤销功能?好难

发布时间: 2013-09-24 10:59:52 作者: rapoo

怎么样实现撤销功能?好难!
例如我点了撤销按钮然后一步一步把之前每一列的数据退回来,直到退到没有了,就返回初始界面。这个怎么实现?UNDO()这东西没有作用。 数据 数据窗口
[解决办法]
可以自己另外加个隐藏的DW

对目标DW的操作,itemchanged事件 或者 insertrow、deleterow操作后,把原数据,和操作后的数据都存储到隐藏的DW中。

你想后退的时候,就从隐藏的DW的最后一行开始判断,自己写回退功能。
[解决办法]
我认为做是可以做,不过很麻烦。
思路就是对DW 每操作一次时,用一个datastore 表格记忆它操作前后的数据及状态。在撤销时读取该Datasore 的相应行次做恢复或重做处理。

麻烦的是对DW 的操作方式太多了,不光是从键盘录入,还可以用代码写入数据,不光是只争对单元格的写入,还有对行次的增删。。。
非要做的话,LZ慢慢想吧。
[解决办法]
我觉得用几个数组存一下 列名 原值 和新值
在itemchanged时间里面 把数据记录下来
撤销时直接通过数组反着处理回来就可以了
[解决办法]
似於 料(data structure)的 堆(Stack)理
中的窗口: dw_1
堆datastore: ds_stack
dw_1的 itemchanged event, 更前的原值 位名,
push ds_stack (使用insertRow(1)即push )
需undo, pull ds_stack的料回填至dw_1

如此即可到您的要求

读书人网 >PB

热点推荐