MS Access:在带有数据表子表单的表单中实现 "check all" 框的最简单方法
MS Access: Easiest way to implement a "check all" box in a form with a datasheet subform
我有一个表单,其主要目的是包含一个数据表子表单(该表单提供跨页面的通用视觉主题以及导航按钮,有时还提供子表单的选择标准)。
我的一个子表单有一个复选框。
用户行为将是:
- 打开此表格
- 根据一些规范过滤数据表
- 做一些离线的事情,例如,十个可见的订单项
- 检查这十个订单项的字段(yes/no 字段)以表明它已完成
我希望用户能够选中一个框,然后选中所有可见的框。
挑战在于它只能是可见的,即取决于所使用的过滤器。
我试图在标有“全部选中”的主窗体中创建一个复选框,运行的代码类似于:
me.sfrmReport.Control.reported.value = me.chkCheckAll.value
但不幸的是,这只检查了活动行,而不是全部。我知道我可以 运行 查询基础 table,但它需要复制用户过滤器。
事实上,可能更酷的是“检查突出显示”框,它只检查突出显示的行。
不过我觉得“全选”会更好
我试图找到这个,但我的搜索技巧让我失望了。我原以为这有点普遍,但也许我想错了。我确实注意到有一个求和函数可以自动对数据表中的 filtered/visible 行求和,因此仅与可见行交互的概念至少在某种程度上是标准的。
好吧,选中所有复选框当然不应该在“行”上。因此,人们会假设在组合框旁边说,您放置了一个全选框。 (无法想象按钮或代码会放在行上)。
所以,在屏幕截图中的组合框旁边,有一个名为“全部选中”的按钮。
该按钮背后的代码 would/could 是:
dim rst as dao.RecordSet
set rst = me.MySubForm.Form.RecordSetClone
rst.movefirst
do while rst.EOF = false
rst.edit
rst!ResultReported = true
rst.update
rst.moveNext
loop
me.MySubForm.Form.Refresh
所以上面将直接对子表单数据源(当前过滤记录集)进行操作。
我从你的截图中“认为”,表单的顶部(带组合)是主表单,你显示的子表单是子表单。
所以,当然你必须替换我上面使用的控件的名称,以及复选框的字段名称。
所以获取该记录集的格式是:
me.MySubFormControlName.Form.RecordSetClone
当然是在代码 运行s 之后触发子表单的刷新。
me.MySubFormControlName.Form.Refresh
请注意,intel-sense 应该可以帮助您。如果代码没有编译,那么在编译之前不要尝试 运行 它。
我有一个表单,其主要目的是包含一个数据表子表单(该表单提供跨页面的通用视觉主题以及导航按钮,有时还提供子表单的选择标准)。
我的一个子表单有一个复选框。
用户行为将是:
- 打开此表格
- 根据一些规范过滤数据表
- 做一些离线的事情,例如,十个可见的订单项
- 检查这十个订单项的字段(yes/no 字段)以表明它已完成
我希望用户能够选中一个框,然后选中所有可见的框。
挑战在于它只能是可见的,即取决于所使用的过滤器。
我试图在标有“全部选中”的主窗体中创建一个复选框,运行的代码类似于:
me.sfrmReport.Control.reported.value = me.chkCheckAll.value
但不幸的是,这只检查了活动行,而不是全部。我知道我可以 运行 查询基础 table,但它需要复制用户过滤器。
事实上,可能更酷的是“检查突出显示”框,它只检查突出显示的行。
不过我觉得“全选”会更好
我试图找到这个,但我的搜索技巧让我失望了。我原以为这有点普遍,但也许我想错了。我确实注意到有一个求和函数可以自动对数据表中的 filtered/visible 行求和,因此仅与可见行交互的概念至少在某种程度上是标准的。
好吧,选中所有复选框当然不应该在“行”上。因此,人们会假设在组合框旁边说,您放置了一个全选框。 (无法想象按钮或代码会放在行上)。
所以,在屏幕截图中的组合框旁边,有一个名为“全部选中”的按钮。
该按钮背后的代码 would/could 是:
dim rst as dao.RecordSet
set rst = me.MySubForm.Form.RecordSetClone
rst.movefirst
do while rst.EOF = false
rst.edit
rst!ResultReported = true
rst.update
rst.moveNext
loop
me.MySubForm.Form.Refresh
所以上面将直接对子表单数据源(当前过滤记录集)进行操作。
我从你的截图中“认为”,表单的顶部(带组合)是主表单,你显示的子表单是子表单。
所以,当然你必须替换我上面使用的控件的名称,以及复选框的字段名称。
所以获取该记录集的格式是:
me.MySubFormControlName.Form.RecordSetClone
当然是在代码 运行s 之后触发子表单的刷新。
me.MySubFormControlName.Form.Refresh
请注意,intel-sense 应该可以帮助您。如果代码没有编译,那么在编译之前不要尝试 运行 它。