2010-03-16 82 views

回答

0

两个ASP.NET和WinForms ListViewItems属性,它允许添加或删除的项目。

0

我写了一个应该有效的小样本。

ListViewItem[] copyOfItemsInListView1 = new ListViewItem[listView1.Items.Count]; 
    ListViewItem[] copyOfItemsInListView2 = new ListViewItem[listView2.Items.Count]; 

    listView1.Items.CopyTo(copyOfItemsInListView1, 0); 
    listView2.Items.CopyTo(copyOfItemsInListView2, 0); 

    listView1.Items.Clear(); 
    listView2.Items.Clear(); 

    for (int i = 0; i < copyOfItemsInListView2.Length; i++) 
    { 
     listView1.Items.Add(copyOfItemsInListView2[i]); 
    } 
    for (int i = 0; i < copyOfItemsInListView1.Length; i++) 
    { 
     listView2.Items.Add(copyOfItemsInListView1[i]); 
    } 
+0

今非昔比OP要求:这将它们从一个LV控制复制到另一个 – dlchambers 2012-10-07 12:41:19

+0

正确。我再次阅读这个问题,看到我误解了这个问题:) – Javier 2012-10-08 14:55:10

0

克隆他们:经穆拉特ref'd的KnowDotNet文章

// move selected item up 
int selectedIndex = mListView.SelectedIndices[0]; 
if (selectedIndex > 0) 
{ 
    ListViewItem item1 = (ListViewItem)mListView.Items[selectedIndex - 1].Clone(); 
    ListViewItem item2 = (ListViewItem)mListView.Items[selectedIndex].Clone(); 
    mListView.Items[selectedIndex - 1] = item2; 
    mListView.Items[selectedIndex] = item1; 

    mListView.SelectedIndices.Remove(selectedIndex); 
    mListView.SelectedIndices.Add(selectedIndex - 1); 
} 
1

大厦,这里是我的扩展方法是一个比较灵活的(它作用于任何项目,而不仅仅是cursel) ,并修复bug(BeginUpdate/Endupdate更少闪烁,EnsureVisible和边界检查)。 并不需要是一个扩展方法,但我喜欢他们:)

namespace YourApp 
{ 
    public static class MyExtensions 
    { 
     // Based upon http://www.knowdotnet.com/articles/listviewmoveitem.html 
     public static void MoveSelectedItem(this System.Windows.Forms.ListView lv, int idx, bool moveUp) 
     { 
      // Gotta have >1 item in order to move 
      if(lv.Items.Count > 1) 
      { 
       int offset = 0; 
      if (idx >= 0) 
      { 
       if (moveUp) 
       { 
        // ignore moveup of row(0) 
        offset = -1; 
       } 
       else 
       { 
        // ignore movedown of last item 
        if (idx < (lv.Items.Count - 1)) 
         offset = 1; 
       } 
      } 

       if (offset != 0) 
       { 
        lv.BeginUpdate(); 

        int selitem = idx + offset; 
        for (int i = 0; i < lv.Items[idx].SubItems.Count; i++) 
        { 
         string cache = lv.Items[selitem].SubItems[i].Text; 
         lv.Items[selitem].SubItems[i].Text = lv.Items[idx].SubItems[i].Text; 
         lv.Items[idx].SubItems[i].Text = cache; 
        } 

        lv.Focus(); 
        lv.Items[selitem].Selected = true; 
        lv.EnsureVisible(selitem); 

        lv.EndUpdate(); 
       } 
      } 
     } 
     } 
} 
1

如果使用自定义的ListViewItem,或对象无法克隆的对象,或股票字符串:

enum Direction { UP = -1, DOWN = +1}; 

void ListViewMove(ListView lv, Direction direction) 
{ 
    if (lv.SelectedItems.Count > 0) 
    { 
     int selIdx = lv.SelectedItems[0].Index; 
     ListViewItem tmp = lv.Items[selIdx] ; 

     if (((selIdx != 0) && direction == Direction.UP) || 
      ((selIdx!=lv.Items.Count-1) && (direction == Direction.DOWN))) 
     {   
      lv.Items.RemoveAt(selIdx); 
      tmp = lv.Items.Insert(selIdx + (int)direction, tmp); 
      tmp.Selected = true; 
     } 
    } 
    lv.Focus(); 
} 
相关问题