Linq学习之绑定ASP.NET的TreeView控件

Linq递归查找数据库树列表(详见日志【Linq递归初始化easyUI Tree数据(.NET MVC+easyUI+Linq)】),并绑定到asp.net的TreeView服务器控件。

代码如下:

     using System.Linq;
     using System.Web;
     using System.Web.UI;
     using System.Web.UI.WebControls;

     public CompanyDataDataContext _db = new CompanyDataDataContext();

     public class TreeViewClass
     {
        public TreeViewClass(int id, string url, string title, List<TreeViewClass> children)
        {
            this.id = id;
            this.url = url;
            this.title = title;
            this.children = children;
        }
        public int id { get; set; }
        public string url { get; set; }
        public string title { get; set; }
        public List<TreeViewClass> children { get; set; }
     }

     #region 初始化树列表
     /// <summary>
     /// 初始化树列表
     /// </summary>
     /// <param name="parentid">父节点ID</param>
     /// <returns></returns>
     public List<TreeViewClass> InitTree(int parentid)
     {
            Func<Menu, bool> where = T => T.ParentID.Equals(parentid);
            Func<Menu, object> orderby = T => T.SortIndex;
            Func<Menu, TreeViewClass> select = T => new TreeViewClass
            (
               T.ID,
               T.Url,
               T.Title,
               InitTree(T.ID) //递归树子节点,妥!
             ); //尝试利用Func委托定义lamdba表达式作为参数传进Linq
            /*var entity = _db.Menus.Where(T => T.ParentID.Equals(parentid)).OrderBy(T => T.SortIndex).Select(T => new TreeViewClass
            (
               T.ID,
               T.Url,
               T.Title,
               InitTree(T.ID) //递归树子节点,妥!
             ));*/
            var entity = _db.Menus.Where(where).OrderBy(orderby).Select(select);
            if (entity.Count() > 0)
            {
                return entity.ToList<TreeViewClass>();
            }
            else return null;
      }
      #endregion

      #region 初始化TreeView树列表
      /// <summary>
      /// 初始化TreeView树列表
      /// </summary>
      /// <param name="parentid">父节点ID</param>
      /// <returns></returns>
      public void InitTreeView(int Parentid, TreeView tv, TreeNode tnode)
      {
            foreach (var t in InitTree(Parentid))
            {
                TreeNode tn = new TreeNode();
                tn.Value = t.id.ToString().Trim();
                tn.Text = t.title;
                tn.NavigateUrl = t.url;
                tn.Target = "main";
                if (tnode == null)
                {
                    tv.Nodes.Add(tn);
                }
                else
                {
                    tnode.ChildNodes.Add(tn);
                }
                try
                {
                    if (t.children.Count > 0)
                    {
                        InitTreeView(t.id, tv, tn); //递归树子节点
                    }
                }
                catch { }
            }
       }
       #endregion

效果如下图:

Menu表:

Web:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CSICSICSICSI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值