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

Это немного безвкусный на данный момент с двумя петлями, но один пост я прочитал сказал, что не может добавлять и удалять элемент в том же цикле Еогеасп.

+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(); 
     }