从多列列表中删除选定的行查看

从多列列表中删除选定的行查看

问题描述:

我有一个列表视图和两列,我使用上下文菜单允许用户删除选定的行。要删除所选行,我试着用下面的代码,但它不工作:从多列列表中删除选定的行查看

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

我怀疑这是因为ListView控件有两列,但我不能找出解决的办法去除选定的行。删除所有行可用:listView1.Items.Clear();

+1

您可以编辑的回复,而不是2倍的第一篇文章。如果有人被提高,你就再也看不到你的帖子了。或反之亦然 – RvdK 2009-02-13 14:19:00

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

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

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

这似乎工作:

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

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

    } 

有没有什么办法,以便有其他行中间没有空行删除项目和重新排序列表视图?

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

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

你可以做什么:

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

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

+0

其实,这不会移动。在迭代过程中不能混淆集合。 – BFree 2009-02-13 14:19:07

+0

但它似乎工作。 – BeefTurkey 2009-02-13 14:20:29

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

我一直使用的东西稍有不同,然后其他人删除ListView控件所有选定的项目:

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

我不知道这将如何匹配性能,明智的其他大型列表上发布的方法,但我认为这是一个稍微更清洁的情况下,这不是一个问题。

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

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

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

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

这工作得更好