问:我有3个交互式下拉菜单(我宁愿将它们保留为交互式下拉菜单,而不是级联下拉菜单)。我不需要交互式下拉菜单的帮助,但它们确实在设计视图中显示为未绑定。下拉列表仅限于表1中的值。根据交互式下拉菜单的选择,我希望子窗体根据下拉菜单的选择显示结果。我尝试了父/子方法,但是由于下拉列表显示为未绑定,因此无法正常工作。我得出的结论是,我需要在AfterUpdate事件中对所有下拉列表进行更多过滤,但不确定如何将其应用于子窗体。
答:如果逐步考虑,该概念应该相对简单。
首先,您希望每当您的任何ComboBox都更新时就运行一个进程。最初打开表单时,您可能还希望运行相同的过程。因此,我们将考虑从所有这些地方调用的过程。
该过程将基于所有ComboBox构建一个过滤器字符串,具有足够的灵活性以确保从过滤器中排除任何空的ComboBox。
在该过程的末尾,需要应用过滤器字符串,并重新查询Form(任何类型的子窗体,子窗体,弹出窗口,当前窗体等)。
为了说明这一点,我整理了一些样板代码。名称可能与您的名称有所不同,并且可能需要调整确切的情况,但是它应该为您提供基本概念:
展开| 选择| 包装| 行号
专用子DoFilter(frmVar作为表单)
Dim strWhere as String
与我一起
如果不是IsNull(.cboNum),则
strWhere = strWhere&“ AND([NumField] =%N)”
strWhere =替换(strWhere,“%N”,。cboNum)
万一
如果不是IsNull(.cboDate),则
strWhere = strWhere&“ AND([DateField] =#%D#)”
strWhere =替换(strWhere,“%D”,格式(.cboDate,“ yyyy \ -m \ -d”))
万一
如果不是IsNull(.cboString)然后
strWhere = strWhere&“ AND([StringField] ='%S')”
strWhere =替换(strWhere,“%S”,。cboString)
万一
如果strWhere>“”,则strWhere = Mid(strWhere,6)
结束于
与frmVar
如果.Filter <> strWhere然后
.Filter = strWhere
.FilterOn =(strWhere>“”)
万一
结束于
结束子