联网版VBA系统:Listview可在线编辑的实现方法

vbahomevbahome 编程知识 3周前 187 0

实现原理: Listview不支持在线编辑, 仅用于数据展示, 如果能实现像网格一样, 双击对应字段就可以实现在线编辑, 那么很多工程中的问题就会迎刃而解, 本文依据的原理正是通过双击调起编辑控件进行内容编辑, 完成后再返回listview, 从而变通地实现ListView可编辑. 

这里有几个重点也是难点需要克服:1. 通过捕捉鼠标双击位置精准定位要编辑的字段位置; 2. 弹出的编辑框能够完全覆盖要编辑的字段区域,并自适应; 3. 滚动窗体依然能够满足1和2

本文以实际编程的先后逻辑实现顺序进行介绍.

步骤1: 窗体设计

在目标窗体增加编辑控件textbox 或 combobox(建议用后者), 因为后者可以实现前者的效果, 而反之则行不通, 并将其添加到容器Frame内,  分别命名为cmbEdit, FrameEdit

联网版VBA系统:Listview可在线编辑的实现方法

步骤2: 定义DblClick事件

该事件可以通过双击Listview调起编辑框(ListViewEditor_Show方法), 该方法返回被点击的listview列号, 可根据返回列来确定编辑框是下拉还是纯文本编辑,并根据业务需要增加相应校验.

联网版VBA系统:Listview可在线编辑的实现方法

步骤3: ListViewEditor_Show方法(片段)

该方法中的核心方法是GetCellPosition, 通过它可以获取点击的单元格的位置

步骤4:GetCellPosition方法

注意这个方法的中后面的四个位置参数是通过引用的方式进行传递的,即传递变量的内存地址,这样的在函数体内修改的值会同步传递到函数体外.

联网版VBA系统:Listview可在线编辑的实现方法

步骤5:保存编辑值

这个可以灵活设置,例子中当鼠标点击listview或者移动到别处会自动将编辑值保存并返回到listview(ListViewEditor_Save方法实现),当不想保存,按ESC可取消(ListViewEditor_Cancel方法实现)

联网版VBA系统:Listview可在线编辑的实现方法

从代码可以看出,只有当点击的listview所在列的表头存在,且新值和旧值不同时,才会去更新数据库(newValUpdate方法实现),这样可以避免无谓的交互.

联网版VBA系统:Listview可在线编辑的实现方法

ListViewEditor_Save方法主要作用是控制编辑框的显示并回写数据到listview, 并把修改的内容进行差异化着色.

联网版VBA系统:Listview可在线编辑的实现方法

ListViewEditor_Cancel方法纯粹的是隐藏编辑框,不回写数据

联网版VBA系统:Listview可在线编辑的实现方法

newValUpdate方法专门负责更新数据库,这个和业务场景是强相关的,就本文介绍的主题来讲关联性不强,为保持介绍的完整性,也一笔带一下.

联网版VBA系统:Listview可在线编辑的实现方法

通过这5步基本就实现了本文要介绍的功能, 最好还是文首说的那几个点, 甚至需要反复调试才能达到预期的效果, 总之,你必须亲自动手试一试才行,如果你觉得AI就能搞定你可以让它试试. 不过我还是那句老话:尽信AI,则不如无AI.


版权声明

本文系作者原创作品,未经许可,不得转载。

喜欢0发布评论

评论列表

发表评论

  • 昵称(必填)
  • 邮箱
  • 网址
  • 验证码(必填)