Vb.net 如果数据已存在,则删除listview中的项

Vb.net 如果数据已存在,则删除listview中的项,vb.net,Vb.net,我正在填充我的listview,当我单击命令按钮时,数据将保存到数据库中,但如果数据库中已经存在数据,则数据将从我的listview中删除。我的问题是,当数据已经存在时,它会删除数据,但它总是在我的listview中保留1个数据。例如,我用数据库中已经存在的10个数据填充列表,当我按下命令按钮时,因为它已经存在于数据库中,它将删除我的listview中的10个数据。发生的是,它将最后一个数据保留在listview中 Dim ListOfExistingItem As List(Of Intege

我正在填充我的listview,当我单击命令按钮时,数据将保存到数据库中,但如果数据库中已经存在数据,则数据将从我的listview中删除。我的问题是,当数据已经存在时,它会删除数据,但它总是在我的listview中保留1个数据。例如,我用数据库中已经存在的10个数据填充列表,当我按下命令按钮时,因为它已经存在于数据库中,它将删除我的listview中的10个数据。发生的是,它将最后一个数据保留在listview中

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

通过这种方式,您将从列表中的最后一项开始,然后反向操作,这将避免问题。

我正在从数据库中比较的数据可能重复,如果数据库中已经存在数据,我将从列表视图中删除数据