1. 程式人生 > >C# .NET treeView(樹形控制元件)繫結資料的通用方法 (精)

C# .NET treeView(樹形控制元件)繫結資料的通用方法 (精)

DataTable dtCangKu = new DataTable(); //定義一張新表
BLL基礎資料.frm_CangKuZiLiao.frm_CangKuZiLiaoClient myfrm_CangKuZiLiaoClient = new BLL基礎資料.frm_CangKuZiLiao.frm_CangKuZiLiaoClient();
private void frm_CangKuZiLiao_Load(object sender, EventArgs e)
 {
            dtCangKu = myfrm_CangKuZiLiaoClient.frm_CangKuZiLiao_Load_SlectCangKu().Tables[0]; //呼叫方法,從資料庫提取資料
            tv_CangKu.Nodes.Clear(); //清空樹形控制元件的所有節點
            AddTree(0, (TreeNode)null); //迴圈遞迴提取資料
            tv_CangKu.ExpandAll(); //展開樹形控制元件的所有節點
 }
#region 迴圈遞迴提取資料(部門)
 public void AddTree(int ParentID, TreeNode pNode)
{
            DataTable dtTree = myfrm_CangKuZiLiaoClient.frm_CangKuZiLiao_Load_getCangKu(ParentID).Tables[0];
            DataView dvTree = new DataView(dtTree); 
            string Fstr = "[倉庫ID_Far] =" + ParentID;
            dvTree.RowFilter = Fstr;
            foreach (DataRowView Row in dvTree)
            {
                TreeNode Node = new TreeNode();
                if (pNode == null)                  //處理主節點
                {
                    Node.Name = Row["倉庫ID"].ToString(); //這裡+了2個值分別到Name和Text
                    Node.Text = Row["倉庫名稱"].ToString();
                    tv_CangKu.Nodes.Add(Node);
                    AddTree(Int32.Parse(Row["倉庫ID"].ToString()), Node); //遞迴
                }
                else //處理子節點
                {
                    Node.Name = Row["倉庫ID"].ToString();
                    Node.Text = Row["倉庫名稱"].ToString();


                    pNode.Nodes.Add(Node);
                    AddTree(Int32.Parse(Row["倉庫ID"].ToString()), Node);
                }
                Node.Tag = Row["倉庫ID"];  //獲取當前節點資料(ID)
            }
}
#endregion