.NET使用递归填充TreeView

最近在做一个信息管理系统的后台,打算用树型结构显示导航列表,用一般的遍历实现不了这样无限级别的导航,所以使用递归.

 

一.数据库表结构大致是这样:

ID       Name(导航名)       ParentID(对应父级)

 1        后台管理                     0                        

 2        人员管理                     1                     

 3        系统人员                     2                      

 4        员工管理                     3                           

 5        单位管理                     1                        

 6        基础资料                     0                                

 7        客户管理                     6                             

 8        商品管理                     6                       

 ……

还有很多属性,这里就不列举出来了,在日后将推出权限方面的文章再提及其他属性,为了思路清晰,实现树绑定仅这些列足够.

预期效果:

              - 后台管理

                  - 人员管理

                       系统人员

                       员工管理

                  - 单位管理

              - 基础资料

                  - 客户管理

                  - 商品管理

(针对列举的数据只有3层,我们要做的是无限级别)

 

二.初期准备:新建Asp.net页面,从导航控件盒拖入TreeView控件

 

三.思路:

     遍历找出没有父级的节点A,如果有下级节点则将下级节点B添加到A的子集,如果B也拥有下级节点C,则将C添加到B的子集,……从这规律我们可以推导出需要遍历的地方以及参数包括  当前节点ID,当前节点实体.以下是代码:

 

//得到导航列表
private List<Model.Sys_Navigation> NavList = new BLL.Sys_Navigation().GetList();
protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                //执行绑定
                CreateTree();
            }
        }

#region  递归绑定树控件
private void CreateTree()
        { 
            
            foreach (Model.Sys_Navigation model in NavList.Where(p => p.ParentID == 0))
            {
                TreeNode ParentNode = new TreeNode(model.Name, model.ID.ToString());
                TreeView1.Nodes.Add(ParentNode);
                GetChildNodes(ParentNode);
            }
        }

        private void GetChildNodes(TreeNode ParentNode)
        {
            foreach (Model.Sys_Navigation model in NavList.Where(p => p.ParentID == MyConvert.toInt32(ParentNode.Value)))
            {
                TreeNode ChildNode = new TreeNode(model.Name, model.ID.ToString());
                if (NavList.Exists(p => p.ParentID == model.ID)) GetChildNodes(ChildNode);
                ParentNode.ChildNodes.Add(ChildNode);
            }
        }
        #endregion

 

 

 代码已经测试通过,为何不能本地上传图片呢,555..只有文字,十分空洞. 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值