Удалить выбранные строки из многостолбцового списка. - PullRequest
4 голосов
/ 13 февраля 2009

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

private void toolStripMenuItem1_Click(object sender, EventArgs e)
{
    listView1.SelectedItems.Clear();
}

Я подозреваю, что это потому, что просмотр списка имеет два столбца, но я не могу найти решение для удаления выбранных строк. Удаление всех строк работает с: listView1.Items.Clear();.

Ответы [ 9 ]

5 голосов
/ 13 февраля 2009

Последний пример BeefTurkey выглядит правильно, но он должен уменьшить значение переменной i после удаления выбранного элемента:

for (int i = 0; i < listView1.Items.Count; i++ )
{
    if (listView1.Items[i].Selected)
    {
        listView1.Items[i].Remove();
        i--;
    }
}

Индекс предметов, больших как i, уменьшается на 1 после удаления. Поэтому вы должны изменить положение i, чтобы соответствовать следующему не проверенному элементу.

2 голосов
/ 16 апреля 2011
while (listBox1.SelectedItems.Count > 0)
{
    listBox1.Items.Remove(listBox1.SelectedItem);
}
1 голос
/ 18 января 2012
 foreach(ListViewItem lvItem in lvDocument.SelectedItems)
 {
      lvDocument.Items.Remove(lvItem);
 }
0 голосов
/ 07 января 2016

do
{ 
  this.listView1.CheckedItems[0].Remove(); 
} while (this.listView1.CheckedItems.Count > 0);

Это работает лучше

0 голосов
/ 01 июля 2011

Это правильный способ удалить все выбранные элементы. Метод заключается в том, чтобы всегда получать доступ к первому выбранному элементу с индексом 0 и циклу, пока не останется больше выбранных элементов. Вы не можете безопасно ссылаться на другие элементы внутри коллекции с абсолютным индексом, так как индексы изменятся, как только вы удалите один из элементов.

while( listView1.SelectedItems.Count > 0)
{
    listView1.Items.Remove(lvFiles.SelectedItems[0]);
}
0 голосов
/ 10 мая 2011

Я использовал что-то немного отличающееся от других, чтобы удалить все выбранные элементы из элемента управления ListView:

foreach (ListViewItem listViewItem in listView1.SelectedItems)
{
    listView1.Items.Remove(listViewItem);
}

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

0 голосов
/ 13 февраля 2009

Что вы можете сделать:

foreach (ListViewItem Item in LstvClients.Items)
{    
     if (item.Selected)
     {
         LstvClients.Items.Remove(Item);
     }
}

(Твой лучше, item.Remove ())

0 голосов
/ 13 февраля 2009

Это, кажется, лучшее решение:

for (int i = 0; i < listView1.Items.Count; i++ )
{
    if (listView1.Items[i].Selected)
    {
        listView1.Items[i].Remove();
    }
}
0 голосов
/ 13 февраля 2009

Это похоже на работу:

    for (int i = 0; i < listView1.Items.Count; i++ )
    {

        if (listView1.Items[i].Selected)
        {
            listView1.Items[i].SubItems.Clear();
        }

    }

Есть ли способ удалить элементы и переупорядочить listView, чтобы в середине других строк не было пустых строк?

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