递归加载TreeView

以前在做目录的时候,每绑定一个节点到数据库里取一条数据,后来当目录特别大的时候,加载半天没反应。

在项目中,应尽量减少访问数据库的次数,在加载目录的时候,应一次性把所有的目录数据取出来,以减少访问数据库的时间而提高效率。

有这么一张Category表,里面有些数据:

获取List<Category>集合

首先获取根目录 即ParentID为-1,加载到TreeView

 1 private void InitTree()
 2         {
 3             List<Category> list = service.GetCategoryList();
 4             if (list.Count > 0)
 5             {
 6                 //绑定根目录
 7                 Category model = list.Where(a => a.ParentID == -1).FirstOrDefault();
 8                 if (model != null)
 9                 {
10                     TreeNode root = new TreeNode();
11                     root.Value = model.CategoryID.ToString();
12                     root.Text = model.CategoryName;
13                     tview.Nodes.Add(root);
14                     //绑定子目录
15                     AddChildNode(root, model.CategoryID, list);
16                 }
17             }
18         }
加载根目录

加载子目录的时候,注意要把子目录加载在上级目录上,而不是绑定到根目录上,否则全部都是根目录了

 1 private void AddChildNode(TreeNode root, int p, List<Category> list)
 2         {
 3             List<Category> listc = list.Where(a => a.ParentID == p).ToList();
 4             //如果有子节点
 5             if (listc.Count > 0)
 6             {
 7                 foreach (Category item in listc)
 8                 {
 9                     TreeNode treec = new TreeNode();
10                     treec.Value = item.CategoryID.ToString();
11                     treec.Text = item.CategoryName;
12                     root.ChildNodes.Add(treec);//tview.Nodes.Add(treec);//错在这里
13                     //递归绑定子节点
14                     AddChildNode(treec, item.CategoryID, list);
15                 }
16             }
17             tview.ExpandDepth = 2;
18         }
递归加载子目录

前台放一个TreeView控件即可:

1 <div>
2         <asp:TreeView ID="tview" runat="server" ShowLines="True" autopostback="true" ImageSet="XPFileExplorer">
3                 <SelectedNodeStyle Font-Bold="True" Font-Size="X-Large" ForeColor="Red" />
4         </asp:TreeView>
5     </div>
TreeView控件

 

 

 

 

 

转载于:https://www.cnblogs.com/huangzhen22/p/3264193.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值