从列表视图中删除重复项

时间:2015-06-17 06:41:38

标签: c# winforms listview

我已将数据绑定到多个来源的ListView。并且存在重复数据,我想从ListView中删除所有重复项。我使用了以下代码,但没有帮助。

listview.Sorting = System.Windows.Forms.SortOrder.Ascending;
for (int i = 0; i < listview.Items.Count - 1; i++)
{
   if (listview.Items[i].Tag == listview.Items[i + 1].Tag)
   {
      listview.Items[i + 1].Remove();
   }
}

2 个答案:

答案 0 :(得分:1)

如果没有a good, minimal, complete code example,就无法确定问题是什么。但是,很可能您的Tag值是引用类型,而不是实际上相同的对象实例。

假设对象覆盖了Equals()方法,您可以使用该方法修复它:

listview.Sorting = System.Windows.Forms.SortOrder.Ascending;
for (int i = 0; i < listview.Items.Count - 1; i++)
{
   if (listview.Items[i].Tag.Equals(listview.Items[i + 1].Tag))
   {
      listview.Items[i + 1].Remove();
      i--;
   }
}

请注意,如果给定值有三个或更多重复项,您还会跳过检查元素的错误。您可以通过在删除元素时递减i来解决此问题(参见上文)。

答案 1 :(得分:0)

试试这个,

      for (int i = 0; i < listview.Items.Count; i++) {
            for (int i_ = 0; i_ < listview.Items.Count; i_++) {
                if (listview.Items[i].Tag == listview.Items[i_].Tag) {
                    listview.Items[i_].Remove();
                    i--; break;
                }
            }
        }

如果可以有多个副本,请删除break