public ActionResult Index()
{
TestEntities tn = new TestEntities();
List<ly> lylist = tn.ly.ToList();
//ViewBag.lyparent = lylist.Where(a => a.ParentId == null).ToList();
// ViewBag.alllist = lylist;
List<MyTreeNode> mtn = ParseTree(lylist);
ViewBag.alllist = mtn;
return View();
}
/// <summary>
/// 解析成一個樹的結構
/// </summary>
/// <param name="lylist"></param>
public List<MyTreeNode> ParseTree(List<ly> lylist)
{
List<MyTreeNode> mytn = new List<MyTreeNode>();
//第一步:先把根節點拿到
foreach (ly item in lylist.Where(a=>a.ParentId==null))
{
MyTreeNode myn = new MyTreeNode();
myn.content = item;
myn.level = 1;
mytn.Add(myn);
}
//第二步:爲每個子節點找到對應的父親
foreach (ly item in lylist.Where(a=>a.ParentId!=null))
{
FindParent(mytn,item);
}
return mytn;
}
/// <summary>
/// 爲每個子節點找到對應的父親
/// </summary>
/// <param name="_mytn"></param>
/// <param name="_item"></param>
public void FindParent(List<MyTreeNode> _mytn, ly _item)
{
foreach (MyTreeNode item in _mytn)
{
if (item.content.Id == _item.ParentId) //表示父親已經找到了
{
if (item.child == null)
{
item.child = new List<MyTreeNode>();
}
MyTreeNode node = new MyTreeNode();
node.content = _item;
node.level = item.level + 1;
item.child.Add(node);
return;
}
//如果該節點還有子節點,繼續找
if (item.child != null)
{
FindParent(item.child, _item);
}
}
}
}
public class MyTreeNode
{
public ly content { get; set; }
public int level { get; set; }
public List<MyTreeNode> child { get; set; }
}
}
前臺代碼
@{
List<MyTreeNode> alllist = ViewBag.alllist as List<MyTreeNode>;
@parseTree(alllist);
}
@helper parseTree(List<MyTreeNode> alllist)
{
foreach (MyTreeNode item in alllist)
{
<div style="margin-left:@(item.level*20)px">@item.content.Content</div>
if(item.child!=null)
{
@parseTree(item.child);
}
}
}