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