有時候的樹結構更復雜,層數多,可能不止在一個表中查詢。如一個項目中的樹結構:
層數不固定,最后的樹葉層時從不同的表中查詢得到。
先利用了上一篇中生成樹的方法:表中的結構和上篇中的機構基本相同。
private void CreateTree(TreeNode PNode, int traceCode)
{
string strSql = "select treecode,treename from TraceTree where ptreecode = " + traceCode;
DataTable dt = SqlClass.GetTable(strSql);
if (traceCode == -1)
{
PNode.Text = dt.Rows[0]["treename"].ToString();
PNode.Tag = "R" + dt.Rows[0]["treecode"].ToString();
tvwTest.Nodes.Add(PNode);
CreateTree(PNode, Convert.ToInt32(dt.Rows[0]["treecode"].ToString()));
}
else
{
if (dt.Rows.Count != 0)
{
for (int i = 0; i < dt.Rows.Count; i++)
{
TreeNode node = new TreeNode();
node.Text = dt.Rows[i]["treename"].ToString();
node.Tag = "P" + dt.Rows[i]["treecode"].ToString();
///////////////AddPro(node, Convert.ToInt32(dt.Rows[i]["treecode"].ToString())); // 注釋添加葉子函數
CreateTree(node, Convert.ToInt32(dt.Rows[i]["treecode"].ToString()));
PNode.Nodes.Add(node);
}
}
}
}
生成樹:
和要求得到的樹機構差不多了,只是差葉子節點。
添加了 private void AddPro(TreeNode node, int treeCode) // 加載樹葉 函數,在添加除了根節點以外的其它節點前,添加這個節點對應的葉子。如上注釋代碼。