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

数据库的结构

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

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

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

具体生成树的方法

        /// 
        /// 根据父节点ID生成树
        /// 
        /// 
        /// 
        public List GetTreeList(int parentID)
        {
            List TreeList = new List();
            List 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;
        }
        /// 
        /// 获取所有节点数据
        /// 
        /// 
        public List GetAllMenuList()
        {
            List list = new List();
            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;
        }
        /// 
        /// 根据父节点获取子节点
        /// 
        /// 
        /// 
        public List GetChildMenuList(int parentID)
        {
            List 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 list = GetTreeList(id, 0);
                obj.children = list;
                json = new JavaScriptSerializer().Serialize(obj);

你可能感兴趣的:(c#管理系统菜单生成树无限级)