[英]What is the most efficient way to delete all selected items in a ListViewItem collection?
我的用戶可以在ListView
集合中選擇多個項目,這些項目配置為顯示詳細信息(即行列表)。
我想要做的就是添加一個Delete
按鈕,將刪除所有選定的項目從ListViewItem
與相關聯的集合ListView
。
ListView.SelectedItems
提供了所選項的集合,但ListView.Items
似乎沒有一個方法可以刪除整個范圍。 我必須遍歷范圍並逐個刪除它們,這可能會修改我正在迭代的集合。
所以,我基本上追求的是AddRange()
的反面。
如果你有一個selectedItems的集合,你可以簡單地在每個集合上調用remove而不是迭代ListView。
ListViewItem上有一個名為Remove()的方法 。
ListView listview = <reference to ListView>;
foreach (ListViewItem item in listView.SelectedItems)
{
item.Remove();
}
這將刪除所有項目的迭代,並僅刪除所選項目。
據我所知,除了單獨刪除它們之外別無他法。
在ListView.BeginUpdate()
和ListView.EndUpdate()
調用中包裝刪除算法。 這樣你就不會在每次刪除時重新獲得重畫的速度。
另外,如果你以相反的順序刪除它們,我相信底層結構將沒有那么做。
此外,如果您要刪除的項目數占項目總數的很大一部分,則可以通過清除列表並再次使用AddRange()
其獲得更高的性能。
對我來說,在linq 2 sql中我使用:
mylist.Clear();
也許您可以嘗試以下方面的內容:
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();
或者只是將剩余的項目分配給現有的控件,或者您喜歡的任何內容。
(稍微編輯格式)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.