Vb.net 如何防止向列表框中添加重复数据?

Vb.net 如何防止向列表框中添加重复数据?,vb.net,listbox,Vb.net,Listbox,我在lst1中有一堆操作系统项,我想将它们放入lst2中,但不在每个列表框中重复它们 我正在使用的界面: 这是有效的,但你可能需要它来理解我的怀疑 Dim dtTa_Enc As DataTable = New DataTable("Ta_Enc") Dim dsTa As DataSet = New DataSet("Ta_E") Dim adapter As New MySqlDataAdapter Dim ds As DataSet = New DataSet adapter.Sel

我在lst1中有一堆操作系统项,我想将它们放入lst2中,但不在每个列表框中重复它们

我正在使用的界面:

这是有效的,但你可能需要它来理解我的怀疑

Dim dtTa_Enc As DataTable = New DataTable("Ta_Enc")
Dim dsTa As DataSet = New DataSet("Ta_E")

Dim adapter As New MySqlDataAdapter
Dim ds As DataSet = New DataSet

adapter.SelectCommand = New MySqlCommand
adapter.SelectCommand.Connection = connection
adapter.SelectCommand.CommandText = query

connection.Open()
adapter.Fill(ds, "tables")
connection.Close()

lst1.DataSource = ds.Tables("tables")
lst1.DisplayMember = "name"
lst1.ValueMember = "codta"

dtTa_Enc.Columns.Add("codta")
dtTa_Enc.Columns.Add("name")
dsTa.Tables.Add(dtTa_Enc)
lst2.DataSource = dsTa.Tables("Tables")
lst2.DisplayMember = "name"
lst2.ValueMember = "codta"
dtTa_Enc.Rows.Add(lst1.ValueMember, lst1.GetItemText(lst1.SelectedItem))
怀疑:
现在,用户按下一个按钮,将其所选项目lst1添加到lst2。容易的!但是,如果他试图添加相同的项目,该怎么办。VB.Net能阻止他这么做吗

If not dtTa_Enc.find("codTa = " + lst1.valuemember) Then
    dtTa_Enc.Rows.Add(lstTabelas.ValueMember, lstTabelas.GetItemText(lstTabelas.SelectedItem))
End If

您可以通过lst2进行枚举,以确定是否有任何值与所选项目相匹配,
lst1.SelectedItem

所以循环

    Dim found As Boolean = False
    For Each itm As String in lst2.Items
        If itm = lst1.SelectedItem Then
            found = True
        End If
    Next
    If Not found Then
        'Add it.
    End If
或者您可以简单地使用
Contains
方法:

    If Not lst2.Items.Contains(lst1.SelectedItem) Then
        'Add it.
    End if.

在添加事件处理程序下,可以在开始处放置一些逻辑,以防止添加重复项

    Dim lst1Selected As String = CType(lst1.SelectedItem, DataRowView)("name").ToString
    Dim flag As Integer = 0
    For Each item As Object In lst2.Items
        Dim istr As String = CType(item, DataRowView)("name").ToString
        If istr = lst1Selected Then
            flag = 1
            Exit For
        End If
    Next

    If flag = 1 Then
        Exit Sub
    End If

对这段代码的修改不起作用,但这是我迄今为止发现的最好的代码:谢谢你的帮助,亚历克斯!但是您的第一个解决方案给了我一个例外:“将'DataRowView'类型转换为'String'类型无效”您的最后一个解决方案虽然运行,但lst2仍然收到重复的“项”。我认为我们正在接近,但不是这样。因为您的解决方案给了我这个例外:“将'DataRowView'类型转换为'String'类型无效”现在,你的代码工作得很好。非常感谢你,乔D