在Vb.net中的SearchBox

时间:2018-01-03 22:26:15

标签: vb.net ms-access searchbar

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

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

1 个答案:

答案 0 :(得分:0)

答案a):

你希望在列表框中包含旧的搜索结果,但不是重复的。

伪代码:

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

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