treeview 递归

        #region TreeView递归无限节点加载

        /// <summary>
        
/// TreeView递归无限节点加载
        
/// 
        
/// 数据表要求-------------------------------------------------
        
/// 
        
/// NodeValue(ID)   RootSign(RootID)  NodeText(Name)
        
///   001                 root              RootDisNameA
        
///                 (注释:RootText)
        
///   002                 root              RootDisNameB
        
///                 (注释:RootText)   
        
///   003                 001               RootDisNameC
        
///   004                 001               RootDisNameD
        
///   005                 001               RootDisNameE
        
///   006                 002               RootDisNameF
        
///   007                 002               RootDisNameG
        
///   008                 005               RootDisNameH
        
///   009                 007               RootDisNameI
        
///   010                 007               RootDisNameJ
        
///   011                 008               RootDisNameK
        
///   012                 011               RootDisNameL
        
///   
        
/// 数据表要求------------------------------------------------
        
/// 这三个字段是必须的,名字可以自定义
        
/// </summary>
        
/// <param name="tv">树形控件</param>
        
/// <param name="dt">数据源控件</param>
        
/// <param name="NodeText">节点显示的字段名</param>
        
/// <param name="NodeValue">表主键编码字段名</param>
        
/// <param name="RootSign">根编码字段名</param>
        
/// <param name="RootText">显示根的条件内容</param>
        public void LoadTreeViewDt(TreeView tv, DataTable dt, string NodeText, string NodeValue, string RootSign, string RootText)
        {
            //得到根节点信息
            DataRow[] DataRoot = dt.Select(RootSign + "='" + RootText + "'");

            //循环遍历根节点信息
            foreach (DataRow dr in DataRoot)
            {
                //加载根节点
                TreeNode tn = new TreeNode();
                tn.Text = dr[NodeText].ToString();
                tn.Tag = dr[NodeValue].ToString();
                tv.Nodes.Add(tn);

                //递归加载子节点
                LoadNodes(tn, dr, NodeText, NodeValue, RootSign, dt);
            }
        }

        private void LoadNodes(TreeNode tn, DataRow dr, string NodeText, string NodeValue, string RootSign, DataTable dt)
        {
            if (dr == null || tn == null) { return; }

            //得到子节点信息
            DataRow[] DataChild = dt.Select(RootSign + "='" + dr[NodeValue].ToString() + "'");

            if (DataChild != null || DataChild.Length > 0)
            {
                //循环遍历子节点信息
                foreach (DataRow drChild in DataChild)
                {
                    //加载子节点
                    TreeNode tnChild = new TreeNode();
                    tnChild.Text = drChild[NodeText].ToString();
                    tnChild.Tag = drChild[NodeValue].ToString();
                    tn.Nodes.Add(tnChild);

                    //形成递归
                    LoadNodes(tnChild, drChild, NodeText, NodeValue, RootSign, dt);
                }
            }
        }

        #endregion
原文地址:https://www.cnblogs.com/zuiyirenjian/p/2535352.html