数据库的结构
首先数据库设计时一定要有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);