2009-02-13 81 views
4

我有一個列表視圖和兩列,我使用上下文菜單允許用戶刪除選定的行。要刪除所選行,我試着用下面的代碼,但它不工作:從多列列表中刪除選定的行查看

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

我懷疑這是因爲ListView控件有兩列,但我不能找出解決的辦法去除選定的行。刪除所有行可用:listView1.Items.Clear();

+1

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

回答

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以匹配下一個未測試的項目。

0

這似乎工作:

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

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

    } 

有沒有什麼辦法,以便有其他行中間沒有空行刪除項目和重新排序列表視圖?

0

這似乎是一個更好的解決方案:

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

你可以做什麼:

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

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

我一直使用的東西稍有不同,然後其他人刪除ListView控件所有選定的項目:

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

我不知道這將如何匹配性能,明智的其他大型列表上發佈的方法,但我認爲這是一個稍微更清潔的情況下,這不是一個問題。

0

這是刪除所有選定項目的正確方法。該方法是始終訪問第一個索引爲0的選定項目並循環,直到沒有更多的選定項目離開。您無法安全地使用絕對索引引用集合中的其他項目,因爲索引一旦刪除其中一個項目就會更改。

while(listView1.SelectedItems.Count > 0) 
{ 
    listView1.Items.Remove(lvFiles.SelectedItems[0]); 
} 
1
foreach(ListViewItem lvItem in lvDocument.SelectedItems) 
{ 
     lvDocument.Items.Remove(lvItem); 
} 
0

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

這工作得更好