我的用户可以在ListView
集合中选择多个项目,这些项目配置为显示详细信息(即行列表)。
我想要做的是添加Delete
按钮,该按钮将删除与ListViewItem
相关联的ListView
集合中的所有选定项目。
ListView.SelectedItems
中提供了所选项目的集合,但ListView.Items
似乎没有一种方法可以删除整个范围。我必须遍历范围并逐个删除它们,这可能会修改我正在迭代的集合。
所以,我基本上追求的是AddRange()
。
答案 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();
或者只是将其余项目分配给现有控件,或者您喜欢的任何内容。
(稍微编辑格式化)