using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace zyl { namespace Html { public class Tree { private List<TreeNode> list = new List<TreeNode>(); public Tree(List<TreeNode> list) { this.list = list; } private string AddTree(string id, List<TreeNode> trees, Func<TreeNode, string> noFunc, Func<TreeNode, string> func)//,Func<TreeNode,string> func) { StringBuilder treeHtml = new StringBuilder(); var childListById = trees.Where(p => p.parentId == id); if (childListById.ToList().Count <= 0) { childListById = trees.Where(p => p.id == id); return "<li>"+noFunc(childListById.ToList()[0])+"</li>"; } foreach (var item in childListById) { if (trees.Select(m => m.parentId).Count(m => m == item.id) > 0) { item.isChild = true; treeHtml.Append("<li>"); treeHtml.Append(func(item)); treeHtml.Append("<ul>"); treeHtml.Append(AddTree(item.id, trees, noFunc, func)); treeHtml.Append("</ul></li>"); } else { item.isChild = false; treeHtml.Append("<li>"); treeHtml.Append(noFunc(item)); treeHtml.Append("</li>"); } } return treeHtml.ToString(); } public string Create(string id, Func<TreeNode, string> noFunc, Func<TreeNode, string> func) { StringBuilder treeHtml = new StringBuilder(); treeHtml.Append("<ul>"); treeHtml.Append(AddTree(id, list, noFunc, func)); treeHtml.Append("</ul>"); return treeHtml.ToString(); } private string func(string id) { string name = ""; // list = list.Where(m=>m.id==id).ToList(); if (id != "") { name = list.Where(m => m.id == id).First().name; string ids = list.Where(m => m.id == id).First().parentId; name += "," + func(ids); } return name; } public string[] GetPath(string id) { if (id == "") { return new string[] { list.Where(m => m.parentId == "").First().name }; } int index = func(id).Length; return func(id).Substring(0, index - 1).Split(',').Reverse().ToArray(); ; } public int Dethp(string id) { return GetPath(id).Length; } public bool HasChild(string id) { if (list.Select(m => m.parentId).Count(m => m == id) > 0) { return true; } return false; } } public class TreeNode { public string id; public string parentId; public string name; public string action; public string control; public string decript; public string url; public string icon; public bool isChild; public int depth; } } }