TreeView dynamic multi-level tree structure and implement drag (Collection)

Transfer:   https://blog.csdn.net/weixin_33894640/article/details/93329994 '

 

Sec know about binary subtree exchange (recursive):    https://blog.csdn.net/onechampion/article/details/91129421

 

 

       private static DataSet objSet = new DataSet();

        //动态构造树-这里支持5级
        public static void SetTrees(TreeView node)
        {
            objSet = Data.GetUnite.GetUnites();
            if (objSet != null)
            {
                if (objSet.Tables[0].Rows.Count != 0)
                {
                    //1级
                    for (int i = 0; i < objSet.Tables[0].Rows.Count; i++)
                    {
                        node.Nodes.Add(objSet.Tables[0].Rows[i][1].ToString());
                    }
                    //2级
                    for (int i = 0; i < node.Nodes.Count; i++)
                    {
                        string nodeDir = gettree(node.Nodes[i]);
                        objSet.Clear ();
                        objSet = Data.GetUnite.GetUnites1 (nodeDir);

                        for (int j = 0; j < objSet.Tables[0].Rows.Count; j++)
                        {
                            node.Nodes[i].Nodes.Add(objSet.Tables[0].Rows[j][1].ToString());
                        }
                        node.Nodes[i].Expand();
                    }
                    //3级
                    for (int i = 0; i < node.Nodes.Count; i++)
                    {
                        for (int k = 0; k < node.Nodes[i].Nodes.Count; k++)
                        {
                            string nodeDir2 = gettree(node.Nodes[i].Nodes[k]);
                            objSet.Clear();
                            objSet = Data.GetUnite.GetUnites1(nodeDir2);
                            for (int j = 0; j < objSet.Tables[0].Rows.Count; j++)
                            {
                                node.Nodes[i].Nodes[k].Nodes.Add(objSet.Tables[0].Rows[j][1].ToString());
                                node.Nodes[i].Nodes[k].Expand();
                            }
                        }
                    }
                    //4级
                    for (int i = 0; i < node.Nodes.Count; i++)
                    {
                        for (int k = 0; k < node.Nodes[i].Nodes.Count; k++)
                        {
                            for (int g = 0; g < node.Nodes[i].Nodes[k].Nodes.Count; g++)
                            {
                                string nodeDir2 = gettree(node.Nodes[i].Nodes[k].Nodes[g]);
                                objSet.Clear();
                                objSet = Data.GetUnite.GetUnites1(nodeDir2);
                                for (int j = 0; j < objSet.Tables[0].Rows.Count; j++)
                                {
                                    node.Nodes[i].Nodes[k].Nodes[g].Nodes.Add(objSet.Tables[0].Rows[j][1].ToString());
                                    node.Nodes[i].Nodes[k].Nodes[g].Expand();
                                }
                            }
                        }
                    }
                    //5级
                    for (int i = 0; i < node.Nodes.Count; i++)
                    {
                        for (int k = 0; k < node.Nodes[i].Nodes.Count; k++)
                        {
                            for (int g = 0; g < node.Nodes[i].Nodes[k].Nodes.Count; g++)
                            {
                                for (int h = 0; h < node.Nodes[i].Nodes[k].Nodes[g].Nodes.Count; h++)
                                {
                                    string nodeDir2 = gettree(node.Nodes[i].Nodes[k].Nodes[g].Nodes[h]);
                                    objSet.Clear();
                                    objSet = Data.GetUnite.GetUnites1(nodeDir2);
                                    for (int j = 0; j < objSet.Tables[0].Rows.Count; j++)
                                    {
                                        node.Nodes[i].Nodes[k].Nodes[g].Nodes[h].Nodes.Add(objSet.Tables[0].Rows[j][1].ToString());
                                        node.Nodes[i].Nodes[k].Nodes[g].Nodes[h].Expand();
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }

 

        // recursive path of the node acquired
        Private static String getTree (the TreeNode Nood)
        {
            IF (nood.Parent == null)
            {
                return nood.Text;
            }
            return Path.Combine (getTree (nood.Parent), nood.Text);
        }

 

         // drag operation tree node
        public static void TreeDrop (treeView3 the TreeView, the DragEventArgs E)
        {
            the TreeNode the newNode;

            if (e.Data.GetDataPresent("System.Windows.Forms.TreeNode", false))
            {

                Point pt;

                TreeNode destinationNode;

                pt = treeView3.PointToClient(new Point(e.X, e.Y));

                destinationNode = treeView3.GetNodeAt(pt);

                = the newNode (the TreeNode) e.Data.GetData ( "System.Windows.Forms.TreeNode");
                // can not drag the uppermost to the lower or the same level
                if (newNode.Parent == null || newNode.Parent.Parent = null =)
                {
                    // Group headquarters \ Institute second \ 1 \ security security office \ sss
                }
                the else
                {
                    String [] = destinationNode.FullPath.ToString the FullPath (). Split (new new String [. 1] { "\\" }, StringSplitOptions.None);
                   // can not exceed the maximum limit level add drag
                    IF (destinationNode.Equals (the newNode!) && FullPath.Length <. 5)
                    {

                        //destinationNode.Nodes.Add(newNode.Clone());

                        destinationNode.Nodes.Add((TreeNode)newNode.Clone());


                        destinationNode.Expand();

                        //Remove original node

                        newNode.Remove();

                    }

                    string nodeDIR = gettree(destinationNode);
                    //MessageBox.Show(nodeDIR + "\\" + newNode.Text.ToString());
                    Data.GetUnite.UpdataPernt(newNode.Text.ToString().Trim(), nodeDIR);
                }
            }
        }

Reproduced in: https: //www.cnblogs.com/guoxiaowen/archive/2009/05/25/1488602.html

Guess you like

Origin blog.csdn.net/qq_36688928/article/details/93337888