从多列列表中删除选定的行查看
我有一个列表视图和两列,我使用上下文菜单允许用户删除选定的行。要删除所选行,我试着用下面的代码,但它不工作:从多列列表中删除选定的行查看
private void toolStripMenuItem1_Click(object sender, EventArgs e)
{
listView1.SelectedItems.Clear();
}
我怀疑这是因为ListView控件有两列,但我不能找出解决的办法去除选定的行。删除所有行可用:listView1.Items.Clear();
。
最新的例子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())
其实,这不会移动。在迭代过程中不能混淆集合。 – BFree 2009-02-13 14:19:07
但它似乎工作。 – 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);
这工作得更好
您可以编辑的回复,而不是2倍的第一篇文章。如果有人被提高,你就再也看不到你的帖子了。或反之亦然 – RvdK 2009-02-13 14:19:00