1. 程式人生 > >C# TreeView從資料庫繫結資料

C# TreeView從資料庫繫結資料

封裝成一個函式,方便直接呼叫

//繫結TrreView
        private void InitModuleTree(DataTable dt)
        {
            //清空treeview上所有節點
            this.tree_Role.Nodes.Clear();  
            int[] gen = new int[dt.Rows.Count]; //用於儲存父節點Tag
            int[] zi = new int[dt.Rows.Count];  //用於儲存子節點Tag
            for (int i = 0; i < gen.Length; i++)
            {
                string zhi=dt.Rows[i][3].ToString();//獲取節點Tag值   eg:1-2
                if (zhi.Length>1)   //表示是子節點   eg:1-2
	            {
		            gen[i] = int.Parse(zhi.Substring(0, zhi.IndexOf('-')));
                    zi[i] = int.Parse(zhi.Substring(zhi.IndexOf('-') + 1));
	            }
                else    //表示是根節點   eg:2
                {
                    //將所有父節點加到treeview上
                    zi[i] =int.Parse(zhi);
                    TreeNode nodeParent = new TreeNode();
                    nodeParent.Tag = (zi[i]).ToString();
                    nodeParent.Text = dt.Rows[i][1].ToString();
                    tree_Role.Nodes.Add(nodeParent);
                }
            }
            bindChildNote(dt,gen,zi);
        }

//繫結子節點
        private void bindChildNote(DataTable dt, int[] gen, int[] zi) 
        {
            for (int i = 0; i < gen.Length; i++)    
            {
                if (gen[i] != 0 && zi[i] != 0)        //便利所有節點,找到所有子節點
                {
                    TreeNode childNode = new TreeNode();
                    foreach (TreeNode item in tree_Role.Nodes)   //便歷treeview上所有父節點
                    {
                        if (item.Tag.ToString() == gen[i].ToString())  //找到當前子節點的父節點
                        {
                            childNode.Tag = zi[i].ToString();
                            childNode.Text = dt.Rows[i][1].ToString();
                            item.Nodes.Add(childNode);
                        }
                    }
                }
            }
            tree_Role.ExpandAll();      //展開整棵樹
        }

資料庫結構:


最終結果:


引用程式碼:

namespace TreeeeeeeeeeeView
{
    public partial class Treeeeeeeeeee : Form
    {
        public Treeeeeeeeeee()
        {
            InitializeComponent();

            //從資料庫獲取資料,得到結果為DataTable
            SystemManager.Dao.RolePower dao = new SystemManager.Dao.RolePower();
            DataSet ds = CommonLib.Dao.CompressUtil.DeCompress(dao.getSystemModule());
            DataTable dt = ds.Tables[0];
            InitModuleTree(dt);
        }

        //繫結TrreView
        private void InitModuleTree(DataTable dt)
        {
            //清空treeview上所有節點
            this.tree_Role.Nodes.Clear();  
            int[] gen = new int[dt.Rows.Count]; //用於儲存父節點Tag
            int[] zi = new int[dt.Rows.Count];  //用於儲存子節點Tag
            for (int i = 0; i < gen.Length; i++)
            {
                string zhi=dt.Rows[i][3].ToString();//獲取節點Tag值   eg:1-2
                if (zhi.Length>1)   //表示是子節點   eg:1-2
	            {
		            gen[i] = int.Parse(zhi.Substring(0, zhi.IndexOf('-')));
                    zi[i] = int.Parse(zhi.Substring(zhi.IndexOf('-') + 1));
	            }
                else    //表示是根節點   eg:2
                {
                    //將所有父節點加到treeview上
                    zi[i] =int.Parse(zhi);
                    TreeNode nodeParent = new TreeNode();
                    nodeParent.Tag = (zi[i]).ToString();
                    nodeParent.Text = dt.Rows[i][1].ToString();
                    tree_Role.Nodes.Add(nodeParent);
                }
            }
            bindChildNote(dt,gen,zi);
        }

        //繫結子節點
        private void bindChildNote(DataTable dt, int[] gen, int[] zi) 
        {
            for (int i = 0; i < gen.Length; i++)    
            {
                if (gen[i] != 0 && zi[i] != 0)        //便利所有節點,找到所有子節點
                {
                    TreeNode childNode = new TreeNode();
                    foreach (TreeNode item in tree_Role.Nodes)   //便歷treeview上所有父節點
                    {
                        if (item.Tag.ToString() == gen[i].ToString())  //找到當前子節點的父節點
                        {
                            childNode.Tag = zi[i].ToString();
                            childNode.Text = dt.Rows[i][1].ToString();
                            item.Nodes.Add(childNode);
                        }
                    }
                }
            }
            tree_Role.ExpandAll();      //展開整棵樹
        }
        
    }
}