TEL:400-8793-956
当前位置:程序、服务器

根据交互式下拉列表过滤子表单

提问者: 近期获赞: 浏览人数: 发布时间:2021-01-18 13:30:49

 问:我有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>“”)
        万一
    结束于
结束子
上一篇: 如何在C ++中使用gsoap消耗wsdl Web服务
下一篇: 在Web应用程序上运行现有的C程序?