如何使用存储过程动态的生成treeview来显示一个关系表

来源:百度知道 编辑:UC知道 时间:2024/09/28 17:55:32
很简单的表ID,NAME,PARTENTCODE,CODE四个字段。
想通过调用存储过程来生成一个动态的树结构,就是每次打开网站就会根据数据库自动更新树的结构。
下面是表:
ID,NAME 可以不管。 PARTENTCODE 等于NULL的时候就是一个父结点,
CODE 为01 或者02,03。

而当PARTENTCODE等于02的时候就是02的子结点,CODE为0201或者0202,0203。。。。

我是个新手,希望把SQL的存储过程,还有所有程序等等写得很清楚,最好还要有注释,我会加分数的,大侠们帮帮忙,速度啊,高分啊。
最好是用treeview来实现这个树结构,我会C#。最好是用C#的。我现在是在做一个动态的网站。

我用PHP写了一个
不过程序在公司电脑里面
你的字段设计不合理
无法实现无限层的树形结构,比如说100层
建议你这样设计,去掉PARTENTCODE,将CODE与ID关联,
下层的CODE=上层的ID
先遍历第一层,然后找第二层
然后递归,找第二层,再找第三层

具体的就不写了,什么都说清楚了是学不会的

SQL那很容易的,
创建连接.
打开数据库
打开表

这里写个伪代码.
private void CreateTree(int pCode,TreeNodeCollection nodes)
{
rs=cnn.open("select name,partentcodefrom,code 表 where partentcode=" +pCode.ToString");//打开表

while(!rs.eof())//循环到记录尾
{
treenode nSubNode=nodes.add(rs("name"));//增加树节点到nodes里
CreateTree(rs("code"),nSubNode.nodes);//递归创建子树.
}
}

这里调用CreateTree()时,这样使用CreateTree(0,treeview1.nodes)
0是你的根接点的记录编号,而不使用null,.net中null只能赋给引用类型,int是值类型不能使用null,建议改用0表示根,若要用null,那么代码和查询的相应改变就没这么简洁了,treeview1是你的树控件.

不过我不建议使用一次性全部创建树,那样会出现停顿现象,建议在点击展开子节点时才创建子节点.这样更快.或者开个线程创建.

有了这个数据库结构,和存储过程,
取出数据之后,还需要一个根据PARTENTCODE生成树的算法

数据库结构按你说的:ID,NAME,PARTENTCODE,CO