如何防止列表视图中添加行的多个实例?

时间:2009-09-24 03:26:58

标签: c# winforms listview

列出itemsToMove = new List();     foreach(lvScanRepository.SelectedItems中的ListViewItem项)     {         itemsToMove.Add(项目);     }

foreach (ListViewItem item in itemsToMove)
{
    if (!lvBatch.Items.Contains(item))
    {
        lvScanRepository.Items.Remove(item);
        lvBatch.Items.Add(item);
    }
}

1 个答案:

答案 0 :(得分:1)

ListViewItem不能同时属于多个ListView,所以这个条件:

if (!lvBatch.Items.Contains(item))

......永远都是真的。

您希望使用什么标准来确定一个ListView中的项目是否与另一个项目中的项目“相似”?根据这一点,您有几个选择:

ListViewItem有一个名为Name的属性,可用于唯一标识ListView中的项目。然后,您可以拨打Items.ContainsKey(String)以查看是否存在具有该名称的项目。

或者,您可以在lvBatch中搜索,找到与您要添加的文本具有相同文本的项目:

if (!lvBatch.Items.Cast<ListViewItem>().Any(i => i.Text == item.Text))

(你需要强制转换,因为ListViewItemCollection实际上并没有实现IEnumerable<ListViewItem>。)