2016-06-09 152 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(); 
     }