Visual FoxPro表单Grid自定义复选框重启后取消选中的实现问询
Visual FoxPro Grid未绑定复选框状态残留解决办法
问题根源
未绑定到数据表的Grid复选框,VFP会默认缓存控件的状态值,就算关闭表单再重新打开,之前选中的状态依然会被保留。单独设置check1.value=0只能对Grid初始加载时显示的行生效,滚动后加载的行还是会带着旧状态。
可行解决方法
方法一:遍历所有行强制重置
修改表单的Init事件代码,在现有逻辑后添加遍历重置的代码,确保每一行的复选框都被设为未选中:
SET PATH TO "C:\Users\ives\Documents\Visual FoxPro Projects\delivered\dbfs" USE IN 0 SHARED packages Thisform.packages.RecordSource = "packages" Thisform.packages.column2.ControlSource = "packages.code" Thisform.packages.column3.ControlSource = "packages.name" Thisform.packages.column4.ControlSource = "packages.address" Thisform.packages.column5.ControlSource = "packages.phone" Thisform.packages.refresh thisform.packages.setfocus() thisform.refresh * 新增重置复选框的代码 LOCAL lnCurrentRec, lnTopRow lnCurrentRec = RECNO("packages") && 保存当前记录位置 lnTopRow = Thisform.packages.TopRow && 记住Grid当前的顶行位置 GO TOP IN packages SCAN Thisform.packages.ActivateCell(RECNO("packages"), 1) && 激活当前行的复选框列 Thisform.packages.Column1.Check1.Value = 0 && 设为未选中 ENDSCAN GO lnCurrentRec IN packages && 恢复原来的记录位置 Thisform.packages.TopRow = lnTopRow && 恢复Grid的显示位置
方法二:绑定临时变量(更简洁)
给复选框绑定一个表单级的临时变量,每次打开表单时重置这个变量:
- 在表单
Init事件的最开头添加代码,创建表单私有变量:
Thisform.AddProperty("glCheckStatus", 0)
- 找到Grid第一列的复选框
Check1,将它的ControlSource属性设置为Thisform.glCheckStatus - 这样每次打开表单时,这个变量会被初始化为0,所有行的复选框都会同步为未选中状态,无需遍历行
这种方法更高效,尤其当数据表记录较多时,不会有遍历的性能开销。
内容的提问来源于stack exchange,提问作者andrey rodriguez
相关产品推荐
相关产品推荐

