概念
前面的文章 FireDAC 学习 - 5 讲到,将 FdQuery 和 FdMemTable 的 CachedUpdates 设置为 True,然后在 FdMemTable 里面编辑后,可以读取到编辑改动的记录,将编辑改动过的记录输出为 Stream,再通过网络将 Stream 送给 FdQuery 然后提交到数据库。
CachedUpdates 方式下,所有对 FdQuery 或者 FdMemTable 里面的记录的修改,比如用户在绑定的 DBGrid 里面对数据做的修改,都缓存在内存里面,用户可以随时对修改进行 Cancel 等操作(类似于一个 Undo 操作),直到执行了 ApplyUpdates 才会真正写入数据库。
问题
用户在 DGBrid 里面对数据进行操作,修改了一条记录的某个字段的内容,或者新增了几条记录,用户都是能看到的。但删除的记录,用户看不到。如果用户想 Undo 删除的记录,用户如果看不到,想不起来之前删除的是哪条记录,不知道是否该 Undo,怎么办?
解决方法
FdMemTable 有一个属性:FilterChanges,这是一个集合属性。在设计期属性面板可以看到:

这里默认没有 rtDeleted,如果把 rtDeleted 加入集合(属性面板里面把 False 改为 True),则即使删除掉的记录,在 DBGrid 里面也显示。
不过这样带来一个界面反馈的问题,删除了一条记录,DBGrid 里面它仍然显示,用户搞不清楚刚才那个删除操作成功了没有,会把人搞糊涂。
一个办法是为 FdMemTable 加上一个计算字段,用于显示每条记录的状态,这样即使该记录存在,状态显示为删除,用户就不会被搞糊涂。当当当,先看效果图:

探讨FireDAC组件中使用CachedUpdates特性时,如何通过设置FilterChanges属性展示已删除记录,以便用户能Undo删除操作。文章详细介绍了解决方案,包括在DbGrid中显示删除状态的记录,以及通过增加计算字段和按钮事件实现显示与隐藏被删除记录的功能。
最低0.47元/天 解锁文章
2409

被折叠的 条评论
为什么被折叠?



