背景:基于嵌入窗体的Excel实例实现的网格,通过双击网格指定列,删除对应行的记录(含前端excel表及后端数据库),同时更新关联单据对应记录的状态。
主要约束:
1、嵌入窗体的Excel表格是新建的实例,与打开窗体的实例不是同一个。
2、由于每次打开窗体都会新建实例,而新实例不具备通过ADO连接数据库的基础条件。
3、每次操作窗体中的Excel实例,都需要进行窗体与Excel实例间的通信,通信过程会产生对象间的频繁切换。
解决方案:
1、因为双击操作在新实例中进行,所以每次新建的时候要把双击事件Worksheet_BeforeDoubleClick代码注入到新实例中。
2、为确保前后端数据一致,删除网格中数据行的同时要删除数据库中对应的记录,所以双击事件要包含操作数据库的逻辑,而约束2决定了这一操作无法在新实例中进行,通过反向调用老实例中删除数据的方法OperateDeleteSingle来实现,即跨实例方法调用。
3、因为操作窗体中的网格实际上是通过窗体与网格间的通信来实现,当删除操作执行后并不能实时反映删除结果,会导致虽然数据已删除但仍展示在网格中的问题,这需要通过刻意强刷来解决。
实现要点:
1、注入用新实例的双击事件代码
2、向新实例中注入代码的方法
3、注入新实例后的代码
4、当前实例(老实例)中操作数据库的方法片段(实现删除数据并更新关联单据状态)
执行逻辑
打开窗体→创建新实例→注入双击事件代码→执行双击操作→更新关联单据状态(跨实例)→删除数据库数据(跨实例)→删除网格数据→强刷网格数据→异常处理,操作日志入库
总结一句话就是:通过向新实例注入代码的方式来控制新实例网格数据,再通过新实例跨实例调用老实例操作数据库的方法来实现前端展示层与后端存储层的数据同步。
版权声明
本文系作者原创作品,未经许可,不得转载。





评论列表
发表评论