表的结构如:Id(int)  PNodeId(int)  MenuName(char)
1        0              一级菜单 
2  1              菜单1
3  1              菜单2
4  1              菜单3
5  1              菜单4
6  1              菜单5
7  1              菜单6
8  1              菜单7
9  1              菜单8
10  1              菜单9
11  1              菜单10
12  1              菜单11
13  1              菜单12
14   2              菜单13
15  2              菜单14
16  2              菜单15
17  15             菜单16
18  15             菜单17我的思路是:根据id查找有多少PNodeId为1的数据,然后构建一级菜单,然后根据这些一级菜单所属的id号查找二级菜单(如第二条数据,id 为2,则查找 PNodeId为2的数据,再递归PNodeId为2的第一条记录,id为14,依次类推)建出来的树的应为:
一级菜单
 |_菜单1
 |  |_菜单13
 |  |_菜单14
 |  |   |_菜单16
 |  |   |_菜单17
 |  |_菜单15
 |_菜单2
 |_菜单3
 |_菜单4
 |_菜单5
 |_菜单6
 |_菜单7
 |_菜单8
 |_菜单9
 |_菜单10
 |_菜单11
 |_菜单12请大家帮帮我,急!!

解决方案 »

  1.   

    先把所有PNodeId为1的记录全部添加到树中
    取出菜单几的那个几,这个只要按字符就可以了
    取出来之后SELECT下,在添加下就好了啊如果一开始就知道菜单数不会超过多少的话
    就直接遍历下PNodeId,从第一个记录开始一个节点一个节点的添加啊
    记得在次之前PNodeId要按大小排下序就可以了
    for(i=1,i<=已知值,i++)
    { s:='菜单'+inttostr(i);
      if i=1 then  直接添加在根目录下;
      if i>1 then  添加成以S为父目录的子目录;(具体添加函数忘记了,不好意思)
    }
      

  2.   

    http://www2.ccw.com.cn/02/0248/d/0248d04_1.asp
      

  3.   

    很简单啊。
    你用TreeView做展现吧?TreeNode的Tag可以用来记当前节点的ID。
    建议你第一次只建第一层节点,当点到某个节点的时候再用select * from 表 where PNodeID = Tag语句判断它是否有子节点,然后再打开。一次性建好所有节点是不科学D,速度慢且没必要。