C# TreeView树节点上下移动

  1. /// <summary>  
  2.        /// 上移  
  3.        /// </summary>  
  4.        /// <param name="sender"></param>  
  5.        /// <param name="e"></param>  
  6.        private void tsbMoveUp_Click(object sender, EventArgs e)  
  7.        {  
  8.            if (Tv_tree.SelectedNode == null)  
  9.            {  
  10.                MessageBox.Show("请选择需要移动的的节点!");  
  11.                this.Focus();  
  12.                return;  
  13.            }  
  14.            folder  model = new folder();  
  15.            TreeNode node = Tv_tree.SelectedNode;     //获得选中节点的值  
  16.            model.folderId = node.Tag.ToString();  
  17.            model.TheOrder = node.Name.ToString();  
  18.            if (node.PrevNode == null)      //选中节点的上一个节点为Null则返回  
  19.            {  
  20.                return;  
  21.            }  
  22.            folder upModel = new folder();  
  23.            TreeNode upNode = node.PrevNode;            //获得选中节点的上一个节点  
  24.            upModel.folderId = upNode.Tag.ToString();  
  25.            upModel.TheOrder = upNode.Name;  
  26.            bool flag = folderOperation.MoveUp(model, upModel);       //将两个节点的排序编号互换  
  27.            if (flag)       //如果执行成功  
  28.            {  
  29.                string theOrder = node.Name;  
  30.                node.Name = upNode.Name;  
  31.                upNode.Name = theOrder;  
  32.                TreeNode newNode = (TreeNode)node.Clone();      //克隆选中的节点  
  33.                if (node.Parent == null)  
  34.                {  
  35.                    Tv_tree.Nodes.Insert(upNode.Index, newNode);      //在选中节点的上一个节点的地方插入本节点  
  36.                }  
  37.                else  
  38.                {  
  39.                    node.Parent.Nodes.Insert(upNode.Index, newNode);  
  40.                }  
  41.                node.Remove();  
  42.                Tv_tree.SelectedNode = newNode;  
  43.            }  
  44.            else  
  45.            {  
  46.                return;  
  47.            }  
  48.        }  
  49.        /// <summary>  
  50.        /// 下移  
  51.        /// </summary>  
  52.        /// <param name="sender"></param>  
  53.        /// <param name="e"></param>  
  54.        private void tsbMoveDown_Click(object sender, EventArgs e)  
  55.        {  
  56.            if (Tv_tree.SelectedNode == null)  
  57.            {  
  58.               MessageBox.Show("请选择需要移动的的节点!");  
  59.                this.Focus();  
  60.                return;  
  61.            }  
  62.            folder model = new folder();  
  63.            TreeNode node = Tv_tree.SelectedNode;     //选中的节点  
  64.            model.folderId = node.Tag.ToString();  
  65.            model.TheOrder = node.Name.ToString();  
  66.            if (node.NextNode == null)      //下一个节点为Null时返回  
  67.            {  
  68.                return;  
  69.            }  
  70.            folder downModel = new folder();  
  71.            TreeNode dowNode = node.NextNode;  
  72.            downModel.folderId = dowNode.Tag.ToString();  
  73.            downModel.TheOrder = dowNode.Name;  
  74.            bool flag = folderOperation.MoveUp(model, downModel);  
  75.            if (flag)  
  76.            {  
  77.                string theOrder = node.Name;  
  78.                node.Name = dowNode.Name;  
  79.                dowNode.Name = theOrder;  
  80.                TreeNode newNode = (TreeNode)dowNode.Clone();       //克隆下一个节点及其所有的子节点  
  81.                if (node.Parent == null)  
  82.                {  
  83.                    Tv_tree.Nodes.Insert(node.Index, newNode);    //在原节点的位置插入下一个节点的值  
  84.                }  
  85.                else  
  86.                {  
  87.                    node.Parent.Nodes.Insert(node.Index, newNode);  
  88.                }  
  89.                dowNode.Remove();           //删除掉选中节点的下一个节点  
  90.                Tv_tree.SelectedNode = node;  //重新选中  
  91.            }  
  92.            else  
  93.            {  
  94.                return;  
  95.            }  
  96.        }  
  97.   
  98. string sql = string.Format("update folder set theorder = '{0}' where folderid = '{1}'", model.TheOrder, upModel.folderId);             
  99. string sql1 = string.Format("update folder set theorder = '{0}' where folderid = '{1}'", upModel.TheOrder, model.folderId);  
 
  1.      /// <summary>  
  2.         /// 节点的展开和折叠  
  3.         /// </summary>  
  4.         /// <param name="sender"></param>  
  5.         /// <param name="e"></param>  
  6.         private void tvDocInfo_AfterExpand(object sender, TreeViewEventArgs e)  
  7.         {  
  8.             if (e.Node.Parent == null)  
  9.             {  
  10.                 TreeView tree = (TreeView)sender;  
  11.                 tree.AfterCheck -= new TreeViewEventHandler(this.tvDocInfo_AfterExpand);  
  12.                 //折叠其他同级节点     
  13.                 TreeNode parentNode = e.Node.Parent;  
  14.                 if (parentNode != null)  
  15.                 {  
  16.                     foreach (TreeNode tn in parentNode.Nodes)  
  17.                     {  
  18.                         if (tn != e.Node)  
  19.                             tn.Collapse();  
  20.                     }  
  21.                 }  
  22.                 else  
  23.                 {  
  24.                     foreach (TreeNode tn in tree.Nodes)  
  25.                     {  
  26.                         if (tn != e.Node)  
  27.                             tn.Collapse();  
  28.                     }  
  29.                 }  
  30.             }  
  31.   
  32.         }  


节点拖拽,必须设置TreeView的AllowDrop属性为True;

    1. private Point Position = new Point(0, 0);  
    2.   
    3. private void treeView1_ItemDrag(object sender, ItemDragEventArgs e)  
    4. {  
    5.     DoDragDrop(e.Item, DragDropEffects.Move);  
    6. }  
    7.   
    8. private void treeView1_DragEnter(object sender, DragEventArgs e)  
    9. {  
    10.     if (e.Data.GetDataPresent(typeof(TreeNode)))  
    11.         e.Effect = DragDropEffects.Move;  
    12.     else  
    13.         e.Effect = DragDropEffects.None;  
    14. }  
    15.   
    16. private void treeView1_DragDrop(object sender, DragEventArgs e)  
    17. {  
    18.     TreeNode myNode = null;  
    19.     if (e.Data.GetDataPresent(typeof(TreeNode)))  
    20.     {  
    21.         myNode = (TreeNode)(e.Data.GetData(typeof(TreeNode)));  
    22.     }  
    23.     else  
    24.     {  
    25.         MessageBox.Show("error");  
    26.     }  
    27.     Position.X = e.X;  
    28.     Position.Y = e.Y;  
    29.     Position = tvType.PointToClient(Position);  
    30.     TreeNode DropNode = this.tvType.GetNodeAt(Position);  
    31.     if (FunctionsUI.CreateQuestionDialog("是否要将"+myNode.Text+"移动"+DropNode.Text+"类别下?") == DialogResult.OK)  
    32.     {  
    33.         // 1.目标节点不是空。2.目标节点不是被拖拽接点的字节点。3.目标节点不是被拖拽节点本身  
    34.         if (DropNode != null && DropNode.Parent != myNode && DropNode != myNode)  
    35.         {  
    36.             TreeNode DragNode = myNode;  
    37.             // 将被拖拽节点从原来位置删除。  
    38.             myNode.Remove();  
    39.             // 在目标节点下增加被拖拽节点  
    40.             DropNode.Nodes.Add(DragNode);  
    41.         }  
    42.         // 如果目标节点不存在,即拖拽的位置不存在节点,那么就将被拖拽节点放在根节点之下  
    43.         if (DropNode == null)  
    44.         {  
    45.             TreeNode DragNode = myNode;  
    46.             myNode.Remove();  
    47.             tvType.Nodes.Add(DragNode);  
    48.         }  
    49.     }  

posted @ 2013-04-23 11:15  金虹巴巴  阅读(1026)  评论(0编辑  收藏  举报