2014-09-05 70 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