Vb.net 中的搜索框

SearchBox in Vb.net

我正在使用访问数据库和列表框制作搜索栏。下面的代码在数据库中搜索项目,如果没有任何项目,它将 return "no matches" 如果有匹配项,它将在列表框中显示结果。

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

回答 a):

猜想您想在列表框中保留旧的搜索结果,但不要重复。

伪代码:

found = false
for each item in listbox
    if newItem = item then found = true
if not found
    listbox.add item

因为我是高级开发人员,我当然会使用不允许重复的字典并编写上面的内容但更复杂。然后我会认为我的代码很丑,并将字典包装在适当命名的 class 中。一杯咖啡后,我会意识到重用和编写、继承或组合一个不允许重复的新列表框控件的可能性。然后我会回家,因为编写所有代码和测试并找到将其放入项目的正确位置并记录它需要一整天。