从多列listView中删除选定的行

时间:2009-02-13 14:05:54

标签: c# winforms listview

我有一个包含两列的列表视图,我正在使用上下文菜单来允许用户删除所选行。要删除所选行,我已尝试使用以下代码,但它不起作用:

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

我怀疑这是因为listview有两列,但我找不到删除所选行的解决方案。删除所有行适用于:listView1.Items.Clear();

9 个答案:

答案 0 :(得分:5)

BeefTurkey的最新示例看起来是正确的,但他应该在删除所选项目后减少变量i

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

删除后,大于i的项目索引减1。因此,您应该重新定位i以匹配下一个未测试的项目。

答案 1 :(得分:2)

while (listBox1.SelectedItems.Count > 0)
{
    listBox1.Items.Remove(listBox1.SelectedItem);
}

答案 2 :(得分:1)

 foreach(ListViewItem lvItem in lvDocument.SelectedItems)
 {
      lvDocument.Items.Remove(lvItem);
 }

答案 3 :(得分:0)

这似乎有效:

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

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

    }

有没有办法删除项目并重新排序listView,以便在其他行的中间没有空行?

答案 4 :(得分:0)

这似乎是一个更好的解决方案:

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

答案 5 :(得分:0)

你能做什么:

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

(你的更好,item.Remove())

答案 6 :(得分:0)

我一直在使用与其他产品略有不同的东西来从ListView控件中删除所有选定的项目:

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

我不确定这与大型列表上的其他发布方法在性能方面是如何匹配的,但我认为在不存在问题的情况下看起来更清晰。

答案 7 :(得分:0)

这是删除所有选定项目的正确方法。该方法始终使用索引0访问第一个选定项目并循环,直到不再有选定项目为止。您不能安全地使用绝对索引引用集合内的其他项目,因为一旦删除其中一个项目,索引就会更改。

while( listView1.SelectedItems.Count > 0)
{
    listView1.Items.Remove(lvFiles.SelectedItems[0]);
}

答案 8 :(得分:0)

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

效果更好