删除ListViewItem集合中所有选定项目的最有效方法是什么?

时间:2009-01-17 10:44:24

标签: c# winforms listview

我的用户可以在ListView集合中选择多个项目,这些项目配置为显示详细信息(即行列表)。

我想要做的是添加Delete按钮,该按钮将删除与ListViewItem相关联的ListView集合中的所有选定项目。

ListView.SelectedItems中提供了所选项目的集合,但ListView.Items似乎没有一种方法可以删除整个范围。我必须遍历范围并逐个删除它们,这可能会修改我正在迭代的集合。

所以,我基本上追求的是AddRange()

4 个答案:

答案 0 :(得分:5)

如果你有一个selectedItems的集合,你只需在每个集合上调用remove,而不是迭代ListView。

ListViewItem上有一个名为Remove()的方法。

ListView listview = <reference to ListView>;
foreach (ListViewItem item in listView.SelectedItems)
{
  item.Remove();
}

这将删除所有项目的迭代,并仅删除您选择的项目。

答案 1 :(得分:1)

据我所知,除了单独删除它们之外别无他法。

ListView.BeginUpdate()ListView.EndUpdate()来电中包含您的删除算法。通过这种方式,您不会在每次删除时获得重新绘制的速度。

此外,如果您以相反的顺序删除它们,我相信底层结构将没有那么做。

此外,如果您要删除的项目数占项目总数的很大一部分,您可以通过清除列表并再次AddRange()来获得更高的性能。

答案 2 :(得分:0)

对我来说,在linq 2 sql中我使用:

mylist.Clear();

答案 3 :(得分:-1)

也许您可以尝试以下方面的内容:

var ItemsToDelete = ... // wherever you get the collection of items to delete from
var RemainingItems = yourList.FindAll(delegate(ListItem x) {
  return !ItemsToDelete.Contains(x)
});
yourListView.DataSource = RemainingItems;
yourListView.DataBind();

或者只是将其余项目分配给现有控件,或者您喜欢的任何内容。

(稍微编辑格式化)