如果数据已存在,则删除listview中的项目

时间:2014-01-06 06:55:10

标签: vb.net

我正在填充我的列表视图,当我单击命令按钮时,数据将保存到数据库,但如果数据库中已存在数据,则数据将从我的列表视图中删除。我的问题是,当数据已经存在时,它会删除数据,但它总是在我的列表视图中留下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

1 个答案:

答案 0 :(得分:0)

我认为你的问题比一分一秒的错误要复杂一点。

当你遍历ListOfExistingItem时,它应该包含要删除的项目的索引,你将从ListView2中删除项目。

问题在于,通过从列表中删除项目,您将更改其后的所有项目的位置。

例如,列出{a,b,c}列表。 ' a'的指数是0,' b'是1,' c'是2。

现在,如果您要说list.RemoveAt(1)那么它将删除' b'。这将导致' c'改为1而不是2。然后,当你去尝试删除' c'时,它就不会在同一个地方。

要快速解决问题,请尝试添加' 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

这样,您将从列表中的最后一项开始,向后工作,这样可以避免这个问题。