Каков наиболее эффективный способ удалить все выбранные элементы в коллекции ListViewItem? - PullRequest
3 голосов
/ 17 января 2009

Мой пользователь может выбрать несколько элементов в коллекции ListView, настроенной для отображения подробностей (то есть списка строк).

Я хочу добавить кнопку Delete, которая удалит все выбранные элементы из коллекции ListViewItem, связанной с ListView.

Коллекция выбранных элементов доступна в ListView.SelectedItems, но ListView.Items, похоже, не имеет ни одного метода, позволяющего мне удалить весь диапазон. Я должен перебрать диапазон и удалить их один за другим, что потенциально изменит коллекцию, над которой я перехожу.

Итак, то, что я в основном ищу, это противоположность AddRange().

Ответы [ 4 ]

5 голосов
/ 17 января 2009

Если у вас есть коллекция ваших selectedItems, вы можете просто вызвать remove для каждого из них, вместо того, чтобы перебирать ListView.

В ListViewItem существует метод Remove () .

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

Это удаляет итерацию по всем элементам и удаляет только выбранные элементы.

1 голос
/ 17 января 2009

Насколько я знаю, нет другого способа, кроме как удалить их по отдельности.

Оберните ваш алгоритм удаления в вызовы ListView.BeginUpdate() и ListView.EndUpdate(). Таким образом, вы не получите замедления перерисовки при каждом удалении.

Кроме того, если вы удалите их в обратном порядке, я полагаю, что основная структура будет делать меньше.

Кроме того, если количество удаляемых элементов составляет значительный процент от общего количества элементов, вы можете повысить производительность, очистив список и AddRange() вернув их обратно.

0 голосов
/ 08 ноября 2013

Для меня в linq 2 sql я использую:

mylist.Clear();
0 голосов
/ 17 января 2009

Возможно, вы могли бы попробовать что-то вроде следующего:

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

или просто назначьте остальные элементы существующему элементу управления, или как вам удобнее.

(немного отредактировано форматирование)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...