代码之家  ›  专栏  ›  技术社区  ›  Andrew

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

  •  3
  • Andrew  · 技术社区  · 17 年前

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

    Delete 按钮,该按钮将从列表中删除所有选定项目 ListViewItem .

    ListView.SelectedItems 但是 ListView.Items 似乎没有一个方法可以删除整个范围。我必须遍历该范围并逐个删除它们,这可能会修改我正在迭代的集合。

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

    4 回复  |  直到 12 年前
        1
  •  5
  •   Ray Booysen    17 年前

    如果您有一个selectedItems的集合,只需对每个集合调用remove,而不是遍历ListView。

    ListViewItem上有一个名为 Remove()

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

        2
  •  1
  •   lc.    17 年前

    据我所知,没有别的办法,只能逐个删除它们。

    将删除算法包装在 ListView.BeginUpdate() ListView.EndUpdate() 电话。这样,您就不会在每次删除时减缓重新绘制的速度。

    此外,如果要删除的项目数占项目总数的很大百分比,则通过清除列表和 AddRange() 再把它们放回去。

        3
  •  0
  •   Sam Chad    12 年前

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

    mylist.Clear();
    
        4
  •  -1
  •   rejj    17 年前

    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();
    

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