我这边树控件从数据库中读取节点信息,然后添加进树控件,想请问下这边用什么事件可以拖动节点排序,然后用什么方法把新的排序写进数据库,以便下次启动重新初始化时使用重新排列的数据。谢谢

解决方案 »

  1.   

    设这Treeview的AllowDrop属性为true;
    拖动时,记录拖动节点及其放下时节点的父节点就可以了    #region 节点拖拽操作
            private Point Position = new Point(0, 0);        private void treeView1_ItemDrag(object sender, ItemDragEventArgs e)
            {
                DoDragDrop(e.Item, DragDropEffects.Move);
            }        private void treeView1_DragEnter(object sender, DragEventArgs e)
            {
                if (e.Data.GetDataPresent(typeof(TreeNode)))
                    e.Effect = DragDropEffects.Move;
                else
                    e.Effect = DragDropEffects.None;
            }        private void treeView1_DragDrop(object sender, DragEventArgs e)
            {
                try
                {
                    TreeNode myNode = null;
                    if (e.Data.GetDataPresent(typeof(TreeNode)))
                    {
                        myNode = (TreeNode)(e.Data.GetData(typeof(TreeNode)));
                    }
                    else
                    {
                        MessageBox.Show("error");
                    }
                    Position.X = e.X;
                    Position.Y = e.Y;
                    Position = tvType.PointToClient(Position);
                    TreeNode DropNode = this.tvType.GetNodeAt(Position);
     
                    if (FunctionsUI.CreateQuestionDialog("是否要将" + myNode.Text + "移动" + DropNode.Text + "类别下?") == DialogResult.OK)
                    {
                        //// 1.目标节点不是空。2.目标节点不是被拖拽接点的字节点。3.目标节点不是被拖拽节点本身
                        if (DropNode != null && DropNode.Parent != myNode && DropNode != myNode)
                        {
                            TreeNode DragNode = myNode;
                            // 将被拖拽节点从原来位置删除。
                            myNode.Remove();
                            // 在目标节点下增加被拖拽节点
                            DropNode.Nodes.Add(DragNode);
                            DragNode.Parent.Expand();
                        }
                        //// 如果目标节点不存在,即拖拽的位置不存在节点,那么就将被拖拽节点放在根节点之下
                        if (DropNode == null)
                        {
                            TreeNode DragNode = myNode;
                            myNode.Remove();
                            tvType.Nodes.Add(DragNode);
                        }
                        
                    }
                }
                catch (Exception ex)
                {
         
                    FunctionsUI.CreateErrorDialog(ex.Message);
                }
            }
            #endregion