我正在使用访问数据库和列表框创建搜索栏。下面的代码搜索数据库中的项目,如果没有任何项目将返回"没有匹配"如果匹配,它将在列表框中显示结果。
a)但是我的程序中存在一个问题,我不确定如何修复。当我再次搜索同一产品时,它将复制结果。我提供了截图,以便您了解。
this image shows what happens, when i search the same product again.
b)是否可以修改此搜索栏,以便它有一个下拉列表,以便用户可以提前看到他们正在搜索的内容。 如果有意义,请帮忙。谢谢
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles btnSearch.Click
Dim con As New OleDbConnection("Provider=Microsoft.jet.oledb.4.0;data source=C:\Users\jacob\Desktop\MS Office\project.mdb")
Dim cmd As OleDbCommand = New OleDbCommand("SELECT * FROM tblProduct WHERE productID LIKE '" & txtSearch_Bar.Text & "'", con)
con.Open()
Dim sdr As OleDbDataReader = cmd.ExecuteReader()
If Not sdr.HasRows Then
MessageBox.Show("No Matches")
Exit Sub
End If
While (sdr.Read())
lstbSearchResult.Items.Add(sdr("ProductID"))
End While
'lstbSearchResult.Items.Clear()
End Sub
答案 0 :(得分:0)
答案a):
我猜你希望在列表框中包含旧的搜索结果,但不是重复的。
伪代码:
found = false
for each item in listbox
if newItem = item then found = true
if not found
listbox.add item
由于我是一名高级开发人员,我当然会使用一本不允许重复的字典并写上面但更复杂的字典。然后我会认为我的代码很难看,并将字典包装在一个适当命名的类中。喝完一杯咖啡之后,我会意识到重用和写入,继承或编写新的列表框控件的可能性,它不允许重复。然后我会回家,因为编写所有代码和测试并找到正确的位置将其放入项目并记录它需要一整天。