vb.net删除listview中的重复和原始记录

时间:2014-09-05 08:03:38

标签: vb.net listview

如果记录中有重复记录,如何删除listview中的记录?它也将删除原始的。例如:

Column1  
AAA       
BBB      
CCC     
AAA       
DDD        

在这种情况下,第一个和第四个都将被删除。 最终输出将是

Column1

BBB     
CCC    
DDD    

请帮助,谢谢。

我试过这个

dim ctr as integer
dim ctr2 as integer

ctr = 0
Do
  ctr2 = 0
  Do
    If ListView3.Items.Item(ctr).Text = ListView3.Items.Item(ctr2).Text And ListView3.Items(ctr).SubItems(1).Text = ListView3.Items(ctr2).SubItems(1).Text Then
      ListView3.Items(ctr).Remove()
      ListView3.Items(ctr2).Remove()
    End If
    ctr2 = ctr2 + 1
  Loop Until ctr = ListView3.Items.Count


  ctr = ctr + 1
Loop Until ctr = ListView3.Items.Count

1 个答案:

答案 0 :(得分:1)

从您的代码我知道列表视图有两列,您想要删除重复的行。

首先,当您发现重复行时,不能直接从列表视图中删除,因为它会对排序项和列表产生问题。 示例:您有以下列表 AA BB CC

CC项目的索引= 2,如果删除BB项目,CC将具有索引= 1。

这是修改您的代码以删除重复的行。

   Dim ctr As Integer
        Dim ctr2 As Integer
        Dim RemovedItemsIndexs As New Collection

        ctr = 0
        Do
            ctr2 = 1
            Do
                If ListView3.Items.Item(ctr).Text = ListView3.Items.Item(ctr2).Text And ListView3.Items(ctr).SubItems(1).Text = ListView3.Items(ctr2).SubItems(1).Text Then
                    If Not RemovedItemsIndexs.Contains(ctr) Then
                        RemovedItemsIndexs.Add(ctr, ctr)
                    End If
                    If Not RemovedItemsIndexs.Contains(ctr2) Then
                        RemovedItemsIndexs.Add(ctr2, ctr2)
                    End If
                End If
                ctr2 = ctr2 + 1
            Loop Until ctr2 = ListView3.Items.Count


            ctr = ctr + 1
        Loop Until ctr = ListView3.Items.Count


        For index As Integer = 1 To RemovedItemsIndexs.Count
            ListView3.Items.RemoveAt(RemovedItemsIndexs(index))
        Next

我要说的最后一件事,你必须在使用前检查子项是否存在,例如如果ListView3.Items(ctr2).SubItems(1)不存在则会抛出异常