找到算法here。
我的类看起来是这样的:
public class LiItem
{
public int Id { get; set; }
public int? ParentId { get; set; }
public string Text { get; set; }
public bool IsRendered { get; set; }
}
public class TreeViewRenderer
{
private IEnumerable _liItems;
public string Render(string treeId, IEnumerable liItems)
{
_liItems = liItems;
StringBuilder sb = new StringBuilder();
sb.AppendFormat("
- \r\n", treeId);
if (_liItems.Count() == 0)
{
sb.AppendFormat("
List is empty");}
foreach (var item in _liItems.Where(i => !i.ParentId.HasValue))
{
RenderLi(sb, item);
AppendChildren(sb, item);
}
sb.AppendLine("
");return sb.ToString();
}
private void AppendChildren(StringBuilder sb, LiItem root)
{
var children = _liItems.Where(i => i.IsRendered == false && i.ParentId == root.Id);
if (children.Count() == 0)
{
sb.AppendLine("");
return;
}
sb.AppendLine("\r\n
- ");
foreach (var item in children)
{
RenderLi(sb, item);
AppendChildren(sb, item);
}
sb.AppendLine("
");}
private void RenderLi(StringBuilder sb, LiItem item)
{
sb.AppendFormat("
{0}", item.Text);item.IsRendered = true;
}
}