Vb.net 如果数据已存在,则删除listview中的项
我正在填充我的listview,当我单击命令按钮时,数据将保存到数据库中,但如果数据库中已经存在数据,则数据将从我的listview中删除。我的问题是,当数据已经存在时,它会删除数据,但它总是在我的listview中保留1个数据。例如,我用数据库中已经存在的10个数据填充列表,当我按下命令按钮时,因为它已经存在于数据库中,它将删除我的listview中的10个数据。发生的是,它将最后一个数据保留在listview中Vb.net 如果数据已存在,则删除listview中的项,vb.net,Vb.net,我正在填充我的listview,当我单击命令按钮时,数据将保存到数据库中,但如果数据库中已经存在数据,则数据将从我的listview中删除。我的问题是,当数据已经存在时,它会删除数据,但它总是在我的listview中保留1个数据。例如,我用数据库中已经存在的10个数据填充列表,当我按下命令按钮时,因为它已经存在于数据库中,它将删除我的listview中的10个数据。发生的是,它将最后一个数据保留在listview中 Dim ListOfExistingItem As List(Of Intege
Dim ListOfExistingItem As List(Of Integer) = New List(Of Integer)
Try
locconn.Open()
For x = 0 To ListView2.Items.Count - 1
Dim a As String = ListView2.Items.Item(x).Text
a = ListView2.Items.Item(x).Text
Dim command As New SqlCommand
Dim TMP_SQL_VAL As String = "select count([Check-Out]) from tbl_list1 where barcode = '" + a + "'"
command = New SqlCommand(TMP_SQL_VAL, locconn)
Dim READER As SqlDataReader
READER = command.ExecuteReader()
READER.Read()
If READER(0) = 0 Then
MsgBox("Barcode: " & a & "is still Inside", MsgBoxStyle.Exclamation)
TextBox4.Text = Nothing
ListOfExistingItem.Add(x)
READER.Close()
End If
READER.Close()
Next
If Not IsNothing(ListOfExistingItem) Then
For Each x As Integer In ListOfExistingItem
If Not x >= ListView2.Items.Count - 1 Then
ListView2.Items.RemoveAt(x)
End If
Next
End If
我认为你的问题比一次一次的错误要复杂一点 当您循环浏览ListOfExistingItem(其中应包含要删除的项的索引)时,您正在从ListView2中删除项 这样做的问题是,通过从列表中删除一个项目,您正在更改该项目之后所有项目的位置 例如,以列表{a,b,c}为例。“a”的索引是0,“b”是1,“c”是2 现在,如果你说list.RemoveAt(1),那么它会删除'b'。这将导致“c”的索引更改为1而不是2。然后,当你去尝试删除'c',它将不会在同一个地方 要快速修复问题,请尝试在最后一个“For”循环之前添加“ListOfExistingItem.Reverse”:
Call ListOfExistingItem.Reverse()
For Each x As Integer In ListOfExistingItem
If Not x >= ListView2.Items.Count - 1 Then
ListView2.Items.RemoveAt(x)
End If
Next
通过这种方式,您将从列表中的最后一项开始,然后反向操作,这将避免问题。我正在从数据库中比较的数据可能重复,如果数据库中已经存在数据,我将从列表视图中删除数据