要现实的ListView控件中的Item 可用上下移动,用户选中某一项 点击上移或下移按钮,Item随之移动,不知道有没有系统函数实现, 这个现实顺序是通过 查询数据库中的数据来的 通过Order by 某个字段,来显示的。 在用户移动了Item后 这个字段的顺序也要跟着变化,真不知道有什么好的方法。先实现 Item的上下移动, 然后 UPdate数据库 将俩个Item对应的字段值交换? 目前是按这种方法在做。

解决方案 »

  1.   

    for(int i=0;i <this.myListView_look.SelectedItems.Count;i++)  
      {  
      System.Windows.Forms.ListViewItem listViewItem = this.myListView_look.SelectedItems[i];  
      int index = this.myListView_look.SelectedItems[i].Index - 1;  
      if (index < 0) return ;  
      this.myListView_look.Items.Remove(this.myListView_look.SelectedItems[i]);  
      this.myListView_look.Items.Insert(index, listViewItem);  
      listViewItem.Selected = true;  
      }  //下移  
     
      for (int i = this.myListView_look.SelectedItems.Count-1; i > -1; i--)  
      {  
      System.Windows.Forms.ListViewItem listViewItem = this.myListView_look.SelectedItems[i];  
      int index = this.myListView_look.SelectedItems[i].Index + 1;  
      if (index > this.myListView_look.Items.Count -1) return;  
      this.myListView_look.Items.Remove(this.myListView_look.SelectedItems[i]);  
      this.myListView_look.Items.Insert(index, listViewItem);  
      listViewItem.Selected = true;   
      }  
      

  2.   

    1.先记录 要移动的数据。然后从UI中Remove掉。然后在
    insert(0,item);
    就可以了
      

  3.   

    index是 你 记录的的数据的 的所以 -1
      

  4.   


     private void MoveItemsDown(ListView listView)
            {
                if (listView.SelectedItems.Count == 0)
                {
                    return;
                }            listView.BeginUpdate();
                int indexMaxSelectedItem = listView.SelectedItems[listView.SelectedItems.Count - 1].Index;            if (indexMaxSelectedItem < listView.Items.Count - 1)
                {
                    for (int i = listView.SelectedItems.Count - 1; i >= 0; i--)
                    {
                        ListViewItem lviSelectedItem = listView.SelectedItems[i];
                        int indexSelectedItem = lviSelectedItem.Index;
                        listView.Items.RemoveAt(indexSelectedItem);
                        listView.Items.Insert(indexSelectedItem + 1, lviSelectedItem);
                    }
                }
                listView.EndUpdate();            if (listView.Items.Count > 0 && listView.SelectedItems.Count > 0)
                {
                    listView.Focus();
                    listView.SelectedItems[listView.SelectedItems.Count - 1].Focused = true;
                    listView.SelectedItems[listView.SelectedItems.Count - 1].EnsureVisible();
                }
            }用的这个