一张树形菜单的递归表,把我搞昏了
数据表结构(就是一张递归表,level是级数,0代表叶节点,这个表的关系是,学生节点下面有姓名、年龄。老师下面有生物老师、化学老师,重点是化学老师下面-------------还有个子节点是姓名)
id pId menutext level
1 001 学生 0
2 00101 姓名 001
3 00102 年龄 001
4 002 老师 0
5 00201 生物老师 002
6 00202 化学老师 002
7 0020201 姓名 00202
代码里面是这样写的:
mmNodes = bll.GetModelList(""); //得到递归表中的所有数据
for (int i = 0; i < mmNodes.Count; i++)
{
yy_MenuModular mmNode = new yy_MenuModular();
if (mmNodes[i].level== “0”) //说明是根节点
{
mmNode.id = mmNodes[i].id;
mmNode.menutext = mmNodes[i].menutext; //节点名称
mmNode.leaf = false; //此处不用管它
for (int j = 1; j < mmNodes.Count; j++)
{
yy_MenuModular mmleafNode = new yy_MenuModular();
if (mmNodes[i].pid=mmNodes[j].level)
{
//说明是第一级子节点
mmleafNode.id = mmNodes[j].id;
mmleafNode.menutext = mmNodes[j].menutext;
mmleafNode.leaf = true; //是否为叶子节点
mmNode.children.Add(mmleafNode);
}
}
}
pNodes.Add(mmNode);
}
问题来了:
读出来显示的树只有叶节点和叶节点下的第一级子节点,"化学老师'下面还有个节点是"姓名",怎么正确的显示这颗树啊,实在是绕晕了,搞 了大半夜都没弄出来,求助各位了
------解决方案--------------------
level 怎么是这样子的,倒像是它父节点的 pId
方法:
C# code
Item 是一行数据的类型名
void Bind(yy_MenuModular node, List<Item> mmNodes, int level)
{
List<Item> childItems = items里筛选出level等于参数level的项;
for (int i = 0; i < childItems.Count; ++i)
{
yy_MenuModular child = new yy_MenuModular();
child.id = childItems[i].id;
child.menutext = childItems[i].menutext;
node.children.Add(child);
Bind(child, mmNodes, childItems[i].pId);
}
}