c#管理系统菜单生成树无限级

数据库的结构

首先数据库设计时一定要有parentID这个字段才能够知道菜单应该放在哪个父菜单下面,类似于:
在这里插入图片描述
然后是新建两个实体类来进行操作:

    public class MenuModel
    {
        public int id { get; set; }
        public int parentID { get; set; }
    }
    public class TreeModel
    {
        public int id { get; set; }
        /// <summary>
        /// 子节点集合
        /// </summary>
        public List<TreeModel> children { get; set; }
    }

可以根据自己项目的实际情况添加一些字段。

具体生成树的方法

        /// <summary>
        /// 根据父节点ID生成树
        /// </summary>
        /// <param name="parentID"></param>
        /// <returns></returns>
        public List<TreeModel> GetTreeList(int parentID)
        {
            List<TreeModel> TreeList = new List<TreeModel>();
            List<MenuModel> ModelList = GetChildMenuList(parentID);
            foreach (var item in ModelList)
            {
                TreeModel m = new TreeModel();
                m.id = item.id;
                m.customerID = item.customerID;
                m.kind = item.kind;
                m.mapGps = item.mapGps;
                m.name = item.name;
                m.Code = item.Code;
                m.remark = item.remark;
                m.children = GetTreeList(item.id);
                TreeList.Add(m);
            }
            return TreeList;
        }
        /// <summary>
        /// 获取所有节点数据
        /// </summary>
        /// <returns></returns>
        public List<MenuModel> GetAllMenuList()
        {
            List<MenuModel> list = new List<MenuModel>();
            tb_orgBLL bll = new tb_orgBLL();
            var orgList = bll.getAllOrgList();
            foreach (var ent in orgList)
            {
                MenuModel model = new MenuModel();
                model.id = ent.org_id;
                model.customerID = ent.customer_id;
                model.kind = ent.org_kind;
                model.mapGps = ent.map_gps;
                model.name = ent.org_name;
                model.Code = ent.org_code;
                model.remark = ent.reamrk;
                model.parentID = ent.parent_id;
                list.Add(model);
            }
            return list;
        }
        /// <summary>
        /// 根据父节点获取子节点
        /// </summary>
        /// <param name="parentID"></param>
        /// <returns></returns>
        public List<MenuModel> GetChildMenuList(int parentID)
        {
            List<MenuModel> list = GetAllMenuList();
            var result = list.Where(x => x.parentID == parentID);
            return result.ToList();
        }

就是上面的三个方法即可,使用了递归算法。

调用

为了让根节点信息也显示出来 调用不能仅仅调用GetTreeList()方法;

               TreeModel obj = new TreeModel();
                tb_orgBLL bll = new tb_orgBLL();
                var org = bll.getOrgByID(id);
                obj.id = org.org_id;
                List<TreeModel> list = GetTreeList(id, 0);
                obj.children = list;
                json = new JavaScriptSerializer().Serialize(obj);
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值