treeview 递归

简介:         #region TreeView递归无限节点加载        ///         /// 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

 

相关文章
|
2月前
EasyUI datagrid 从左至右递归合并表格
EasyUI datagrid 从左至右递归合并表格
25 2
|
JavaScript 算法 前端开发
js 递归获取子节点所有父节点,深度遍历获取第一个子树
js 递归获取子节点所有父节点,深度遍历获取第一个子树
629 0
|
C#
WPF TreeView 选择事件执行两次,获取TreeView的父节点的解决方法
1.TreeView选择事件执行两次 Very often, we need to execute some code in SelectedItemChanged depending on the selected TreeViewItem.
1123 0
199.二叉树的右视图
199.二叉树的右视图
80 0
199.二叉树的右视图
|
C#
【C#】wpf查找父子节点
原文:【C#】wpf查找父子节点 using System; using System.Collections.Generic; using System.
836 0