using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Web; namespace WebAPI.Utility { public class TreeUtil { public class TreeModel { public string id { get; set; } public string title { get; set; } public List children = new List(); } #region 递归函数 /// /// 递归函数 /// public void digui(DataTable dt, List tree, int num) { for (int m = 0; m < tree.Count; m++) { tree[m].children = new List(); for (int i = 0; i < dt.Rows.Count; i++)//第一次循环,得到所有根节点的子集 { var strLen = dt.Rows[i]["hnumber"].ToString().Split('.'); if (strLen.Length == num && dt.Rows[i]["hnumber"].ToString().Contains(tree[m].id + ".")) { TreeModel tbjson = new TreeModel(); tbjson.id = dt.Rows[i]["hitemid"].ToString(); tbjson.title = dt.Rows[i]["hname"].ToString(); tree[m].children.Add(tbjson); } } var strLens = tree[m].id.Split('.'); for (int i = 0; i < tree[m].children.Count; i++) { digui(dt, tree[m].children, strLens.Length + 2);//再次用子集去循环,拿出子集的子集 } } } #endregion #region 分类 树形图(根据代码展开树状图) public void getTreeByLevel(DataTable dt, List tree, int num) { for (int m = 0; m < tree.Count; m++) { tree[m].children = new List(); for (int i = 0; i < dt.Rows.Count; i++)//第一次循环,得到所有根节点的子集 { var HLevel = (int)dt.Rows[i]["hlevel"]; var HParentID = dt.Rows[i]["hparentid"].ToString(); if (HLevel == num && HParentID == tree[m].id) { TreeModel tbjson = new TreeModel(); tbjson.id = dt.Rows[i]["hitemid"].ToString(); tbjson.title = dt.Rows[i]["hname"].ToString(); tree[m].children.Add(tbjson); } } for (int i = 0; i < tree[m].children.Count; i++) { getTreeByLevel(dt, tree[m].children, num + 1);//再次用子集去循环,拿出子集的子集 } } } #endregion } }