我已将数据绑定到多个来源的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();
}
}
答案 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
。