1、首先資料庫: f_id 項目ID號 ,f_front 父ID號 ,f_name名稱,f_type類型,f_layer所處層,f_order 同層的順序號;(f_layer,f_order不要也可,這裡我主要是需要同層排序才用到)
2、然後“select f_id,f_front,f_name,f_type from data”取得DataSet資料集dsFrame;treeview 名稱設為tvDept
3、寫函數 構建treeveiw樹形:
public void AddTree(int ParentID, TreeNode pNode)
{
DataView dvTree = new DataView(dtTree); //就是dtTree = dsFrame.Tables[0];
string Fstr = "[f_front] = " + ParentID;
dvTree.RowFilter = Fstr;
foreach (DataRowView Row in dvTree)
{
TreeNode Node = new TreeNode();
if (pNode == null) //處理主節點
{
Node.Name = Row["f_id"].ToString(); //這裡+了2個值分別到Name和Text,可隨便
Node.Text = Row["f_name"].ToString();
if (Row["f_type"].ToString() == "崗位") //這個不要也可以,主要為了不同類型顯示不同表徵圖
{
Node.ImageIndex = 1;
Node.SelectedImageIndex=1;
}
else
{
Node.ImageIndex = 0;
Node.SelectedImageIndex=0;
}
tvDept.Nodes.Add(Node); //加入
AddTree(Int32.Parse(Row["f_id"].ToString()), Node); //遞迴
}
else //處理子節點
{
Node.Name = Row["f_id"].ToString();
Node.Text = Row["f_name"].ToString();
if (Row["f_type"].ToString() == "崗位")
{
Node.ImageIndex = 1;
Node.SelectedImageIndex = 1;
}
else
{
Node.ImageIndex = 0;
Node.SelectedImageIndex=0;
}
pNode.Nodes.Add(Node);
AddTree(Int32.Parse(Row["f_id"].ToString()), Node);
}
}
}
4、調用方法
AddTree(0, (TreeNode)null); //0就是處於最進階其f_front=0,資料庫裡1為頂層那就是1,這個隨便
最好+一句 tvDept.ExpandAll(); 展開所有項。