英文:
Typing in a Combobox to filter for selection in a subform grid
问题
我在MS Access 2016中有一个带有数据表视图子表的表单。我有一列是下拉框,我正在根据输入筛选值。它对于第一次选择有效,但在我进行选择后,我想要要么转到下一条记录并进行另一个选择,要么更改我在当前行中的选择时,所有的值都会消失并为空。这是我的代码:
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
If Len(combo.Text) > 0 Then
strSQL = defaultSQL & " WHERE " & lookupField & " LIKE '*" & combo.Text & "*'"
Else
strSQL = defaultSQL '这是下拉框的默认行源
End If
combo.RowSource = strSQL
combo.Dropdown
End Sub
Private Sub Select_Item_AfterUpdate()
'重置下拉列表
Select_Item.RowSource = RecordSQL
Select_Item.Requery
Select_Item.Dropdown
Select_Item.SetFocus
End Sub
Private Sub Select_Item_Change()
FilterComboAsYouType Me.Select_Item, RecordSQL, "Description"
End Sub
英文:
I have a form in ms access 2016 with a subform in datagrid view. I have a column that is a combobox and I am filtering the values as you type. It works for the first selection, but when after I make my selection and I want to either go to the next record and make another selection or change the selection I made in my current row, all the values disappear and are blank. This is my code:
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
If Len(combo.Text) > 0 Then
strSQL = defaultSQL & " WHERE " & lookupField & " LIKE '*" & combo.Text & "*'"
Else
strSQL = defaultSQL 'This is the default row source of combo box
End If
combo.RowSource = strSQL
combo.Dropdown
End Sub
Private Sub Select_Item_AfterUpdate()
'reset dropdown list
Select_Item.RowSource = RecordSQL
Select_Item.Requery
Select_Item.Dropdown
Select_Item.SetFocus
End Sub
Private Sub Select_Item_Change()
FilterComboAsYouType Me.Select_Item, RecordSQL, "Description"
End Sub
答案1
得分: 0
经过研究和代码实验,我找到了这个解决方案,我根据我的应用程序进行了修改。下面的代码适用于我所需的情况:
'
Option Compare Database
Private Const RecordSQL As String = "SELECT ConID, ItemNo, Description FROM Consignment"
Public Sub FilterComboAsYouType(Filter As Boolean)
Dim strSQL As String
strSQL = RecordSQL '这是组合框的默认行来源
Me.Select_Item.RowSource = strSQL
'Me.Select_Item.Requery
DoEvents
If Filter Then
DoEvents
strSQL = RecordSQL & " WHERE Description LIKE '*" & Me.Select_Item.Text & "*'"
Me.Select_Item.RowSource = strSQL
'Me.Select_Item.Requery
Me.Select_Item.Dropdown
'Forms![PurchaseOrders]![PO_Con Subform]!Select_Item.Refresh
'Forms![PurchaseOrders]![PO_Con Subform].Refresh
'Me.Repaint
End If
End Sub
Private Sub Form_Load()
FilterComboAsYouType False
End Sub
Private Sub Select_Item_AfterUpdate()
FilterComboAsYouType False
'设置焦点在主窗体控件上
'Me.Parent.Text17.SetFocus
'Me.PoQty.SetFocus
End Sub
Private Sub Select_Item_Change()
FilterComboAsYouType True
End Sub
Private Sub Select_Item_GotFocus()
FilterComboAsYouType False
End Sub
Private Sub Select_Item_LostFocus()
FilterComboAsYouType False
End Sub
Private Sub txtSerial_KeyUp(KeyCode As Integer, Shift As Integer)
Me.Select_Item.SetFocus
FilterComboAsYouType True
'DoEvents
Me.Select_Item.Dropdown
End Sub
'
这是您提供的代码的翻译部分。
英文:
After researching and playing with code, I found this solution which I modified to my application. This code below worked for what I needed:
'''
Option Compare Database
Private Const RecordSQL As String = "SELECT ConID, ItemNo, Description FROM Consignment"
Public Sub FilterComboAsYouType(Filter As Boolean)
Dim strSQL As String
strSQL = RecordSQL 'This is the default row source of combo box
Me.Select_Item.RowSource = strSQL
'Me.Select_Item.Requery
DoEvents
If Filter Then
DoEvents
strSQL = RecordSQL & " WHERE Description LIKE '*" & Me.Select_Item.Text & "*'"
Me.Select_Item.RowSource = strSQL
'Me.Select_Item.Requery
Me.Select_Item.Dropdown
'Forms![PurchaseOrders]![PO_Con Subform]!Select_Item.Refresh
'Forms![PurchaseOrders]![PO_Con Subform].Refresh
'Me.Repaint
End If
End Sub
Private Sub Form_Load()
FilterComboAsYouType False
End Sub
Private Sub Select_Item_AfterUpdate()
FilterComboAsYouType False
'Set Focus on Mainform Control
'Me.Parent.Text17.SetFocus
'Me.PoQty.SetFocus
End Sub
Private Sub Select_Item_Change()
FilterComboAsYouType True
End Sub
Private Sub Select_Item_GotFocus()
FilterComboAsYouType False
End Sub
Private Sub Select_Item_LostFocus()
FilterComboAsYouType False
End Sub
Private Sub txtSerial_KeyUp(KeyCode As Integer, Shift As Integer)
Me.Select_Item.SetFocus
FilterComboAsYouType True
'DoEvents
Me.Select_Item.Dropdown
End Sub
'''
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论