Access 2016子窗体网格组合框输入过滤后选项消失问题求助
问题分析与解决
你的问题出在数据表视图子窗体中ComboBox的事件逻辑处理不当,核心问题点如下:
AfterUpdate事件里多余的Dropdown和SetFocus操作,会干扰控件在数据表视图中的状态切换,导致选项被意外清空。- 切换记录或重新编辑已选内容时,控件未主动重置数据源,残留的过滤条件或异常状态会让选项显示空白。
- 数据表视图下ComboBox的
Change事件触发逻辑和单窗体不同,缺少进入控件时的数据源初始化步骤。
修改后的代码
Option Compare Database Private Const RecordSQL As String = "SELECT ConID, ItemNo, Description FROM Consignment" Public Sub FilterComboAsYouType(combo As ComboBox, defaultSQL As String, lookupField As String) Dim strSQL As String Dim searchText As String ' 去除输入文本前后空格,避免无效过滤 searchText = Trim(combo.Text) If Len(searchText) > 0 Then ' 参数化拼接SQL,避免注入风险 strSQL = defaultSQL & " WHERE " & lookupField & " LIKE '*' & ? & '*'" combo.RowSource = strSQL combo.RowSourceArgs = searchText Else strSQL = defaultSQL combo.RowSource = strSQL End If combo.Dropdown End Sub Private Sub Select_Item_AfterUpdate() ' 仅重置数据源并刷新,移除干扰性操作 Select_Item.RowSource = RecordSQL Select_Item.Requery End Sub Private Sub Select_Item_Change() FilterComboAsYouType Me.Select_Item, RecordSQL, "Description" End Sub ' 新增Enter事件,确保进入控件时重置数据源 Private Sub Select_Item_Enter() Select_Item.RowSource = RecordSQL Select_Item.Requery End Sub
关键调整说明
- 新增
Enter事件:每次点击ComboBox进入编辑状态时,强制重置为默认数据源,确保切换记录后控件能正常加载所有选项。 - 优化过滤逻辑:用
Trim处理输入文本,避免空格导致的无效过滤;改用参数化SQL拼接,规避注入风险的同时保证逻辑稳定性。 - 简化
AfterUpdate事件:移除Dropdown和SetFocus,这两个操作在数据表视图中会打乱控件的正常状态流转,是选项空白的直接诱因。 - 明确数据源重置时机:无论是进入控件还是选择完成后,都保证数据源回到默认状态,避免残留过滤条件导致无数据显示。
内容的提问来源于stack exchange,提问作者user2916373
相关产品推荐
相关产品推荐

