2014-09-05 66 views
-2

如果记录中有重复的记录,如何删除listview中的记录?它也会删除原来的一个。例如:vb.net删除列表视图中的重复记录和原始记录

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 
+0

你需要保存项目的相对顺序? – Richard 2014-09-05 08:11:55

+0

不,我只需要删除重复的和原来的一个 – 2014-09-05 08:19:59

+1

为什么在ListView中首先有重复的项目?是否有可能防止他们被添加,而不是之后删除它们?如果可行,这样会更好。 – jmcilhinney 2014-09-05 08:24:42

回答

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)不存在,会抛出异常

+0

嗨我试着用你的代码进行一些修改,但我跑到另一个问题.. – 2014-09-09 06:20:07