日期:2014-05-18  浏览次数:20658 次

一张树形菜单的递归表,把我搞昏了
数据表结构(就是一张递归表,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);
    }
}