C# 当前节点最下级节点,最深的节点,递归
需求:取默认第一个根节点下,最下级节点。最深的节点。动态树。
//已知树泛型集合,顶级节点 RootItems
public List<MenuItem1> MainDataSourceMenuItem;
public List<MenuItem1> MainDataSourceMenuItemAll;
public MenuItem1 SecurityMenuItemModel;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
已知数据源
List<MenuItem1> RootItems= //根节点泛型集合
///若没有二级 整个这个包起来 再判断
if (liststringtemp.Count() > 1)
{
List<string> liststringtemp= Request.QueryString["app"].Split(new char[] { ',', ',' }, StringSplitOptions.RemoveEmptyEntries).ToList();
APPcodesystrm = liststringtemp.Skip(0).Take(1).FirstOrDefault(); //获取子系统
foreach ( var RootItemstemp in RootItems)
{
if (RootItemstemp.Id == int.Parse(APPcodesystrm) )
{
MainDataSourceMenuItem = RootItems.Where(x => x.Id == RootItemstemp.Id).FirstOrDefault().Items;
}
}
}
else //子系统 值丢失
{
MainDataSourceMenuItem = RootItems.FirstOrDefault().Items;
}
MainDataSourceMenuItemAll = // 这里去拿数据中该人的所有有树
SecurityMenuItemModel = MainDataSourceMenuItem.FirstOrDefault();
//调递归 核心思路
selectlowtree(SecurityMenuItemModel);
}
}
/// <summary>
/// 最深的节点 调递归
/// </summary>
/// <param name="MainDataSourceMenuItem"></param>
public void selectlowtree(MenuItem1 SecurityMenuItemModel)
{
foreach (MenuItem1 node in MainDataSourceMenuItemAll)
{
//从所有权限的菜单 以自己为顶节点找的自己的树菜单
if (SecurityMenuItemModel.Id == node.Id)
{
//父节点有子节点就调 自己 有父就就子
if (node.Items.Count > 0) //&& node.ParentId==0 更具业务需要在看这个
{
//因为最终要找node id 找下级节点
selectlowtree(node.Items.FirstOrDefault()); //核心思路
}
else //最后一个不等于peaerntde
{
//SecurityMenuItemModel
= SecurityMenuItemModel.Name ?? "";
}
}
}
}