2016-06-09 147 views
0

我有兩個ListViews並希望將項目從一個移動到另一個。無法從WinForms中刪除項目ListView

我可以複製到新列表,但從第一個列表中刪除不起作用。

private void button2_Click(object sender, EventArgs e) 
{ 
    foreach (ListViewItem i in listView1.Items) 
    { 
     if (i.Checked == true) 
     { 
      ListViewItem itemClone = i.Clone() as ListViewItem; 
      listView2.Items.Add(itemClone); 
     } 
    }  
    foreach (ListViewItem itemSelected in listView1.SelectedItems) 
    { 
     listView1.Items.Remove(itemSelected); 
    } 

    listView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize); 
    listView2.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize); 
} 

這是在兩個圈的那一刻有點不雅,但一個帖子我看書上說我不能添加和在同一foreach循環中刪除項目。

+0

什麼是您的表單加載代碼?如果你在那裏綁定數據,並且沒有'if(!Page.IsPostBack){}',那麼無論你做什麼都會在回發中被覆蓋。 – prospector

+0

應該提到它是一個Winforms項目! – Ben

+0

你是什麼意思與「不工作」?不編譯,運行正常但不執行任何操作,會引發異常? –

回答

2

您在第二個循環中使用了SelectedItems,而不是CheckedItems。

0

我相信你想刪除選中的項目,因爲他們移動到第二個列表視圖。所以試試這個:

 private void button1_Click(object sender, EventArgs e) 
     { 
      listView1.BeginUpdate(); 
      listView2.BeginUpdate(); 

      var checkedItems = new List<ListViewItem>(); 

      foreach (ListViewItem li in listView1.CheckedItems) 
      { 
       checkedItems.Add(li.Clone() as ListViewItem); 
       listView1.Items.Remove(li); 
      } 

      listView2.Items.AddRange(checkedItems.ToArray()); 

      listView1.EndUpdate(); 
      listView2.EndUpdate(); 
     }