急~~~~treeview动态生成树的问题~~~~~~各位大侠帮忙啊,在线等啊~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

时间:2021-02-13 11:50:24
我的treeview是这样的,在读取页面的时候就要生成全部树。但是树可能有的节点有2层,3层甚至更多。这时要调用存储过程来做,数据库表中有个字段为level_id 就是根据父节点的menu_id,而level_id就是决定那些是它下面的子节点。同一个父节点的level_id是一样的。
当然,子节点下也可能还有子节点,都是调用同一个存储过程。就是把level_id传入,得到新的子节点的menu_id。同时还可以调用一个存储过程来判断,该节点下是否有子节点。
注意,在此,我不要用autopostback的方法。所以要画窗体的时候就完成。
那位大哥能写一下程序。我知道用嵌套循环可以,可是程序怎么做都不行。
跪求各位。如果分数不够,我一定多给,请各位给我程序,不要从其他帖子copy过来。我都看过了,csdn上的没有能专门解决的~~~

9 个解决方案

#1


你既然要一次性把所有数据都弄到数上。就不必去重复调用存储过程了。利用存储过程把表的数据读到一个DataTable中。然后这么处理。DataTable 名为dt,调用函数

public void CreateNode(string parentid,TreeNode parentnode)
{
DataRow [] drs = dt.Select(level_id +"= '" + parentid + "'");// 选出所有子节点
//遍历所有子节点
foreach( DataRow r in drs )
{
   TreeNode tempnode = new TreeNode();
   tempnode.Text = "test";
   tempnode.NodeData = "11";
   parentnode.Nodes.Add(tempnode);
   parentid=r[menu_id].ToString;
   CreateNode(parentid,tempnode);
}
}

#2


大哥,能不能再完整点。找不到头绪。谢谢。
那关于那个是父节点那个是那个的子节点怎么办???

#3


每一个记录只要有一个字段来标识它的父节点就行,不必那么麻烦!

#4


递归自动从上到下,你有个父子节点匹配就可以了。

#5


这样可能不完全行。是这样的,我现在有2个存储过程。这2个是不动的。
一个就是来读取MENU_ID MENU_NAME的,但是必须要父节点的menu_id作为参数。不然不行。所以第一层的时候是默认-99

第二个存储过程是用来判断是否有子节点的。
所以说一次存储过程只能得到一个节点的子节点。

#6


我也问了差不多的问题,我认为每个节点下的分节点建一个查询

#7


是的。如果扩展到无限层,那么就要不断的手动添加循环,我觉得这个方法是不对的。

#8


自己顶

#9


首先是在数据库中写存储过程完成通过一个目录ID找到它的所有子目录ID,
这样一来程序就很容易实现了:
参考
http://expert.csdn.net/Expert/topic/2863/2863032.xml?temp=.92297

#1


你既然要一次性把所有数据都弄到数上。就不必去重复调用存储过程了。利用存储过程把表的数据读到一个DataTable中。然后这么处理。DataTable 名为dt,调用函数

public void CreateNode(string parentid,TreeNode parentnode)
{
DataRow [] drs = dt.Select(level_id +"= '" + parentid + "'");// 选出所有子节点
//遍历所有子节点
foreach( DataRow r in drs )
{
   TreeNode tempnode = new TreeNode();
   tempnode.Text = "test";
   tempnode.NodeData = "11";
   parentnode.Nodes.Add(tempnode);
   parentid=r[menu_id].ToString;
   CreateNode(parentid,tempnode);
}
}

#2


大哥,能不能再完整点。找不到头绪。谢谢。
那关于那个是父节点那个是那个的子节点怎么办???

#3


每一个记录只要有一个字段来标识它的父节点就行,不必那么麻烦!

#4


递归自动从上到下,你有个父子节点匹配就可以了。

#5


这样可能不完全行。是这样的,我现在有2个存储过程。这2个是不动的。
一个就是来读取MENU_ID MENU_NAME的,但是必须要父节点的menu_id作为参数。不然不行。所以第一层的时候是默认-99

第二个存储过程是用来判断是否有子节点的。
所以说一次存储过程只能得到一个节点的子节点。

#6


我也问了差不多的问题,我认为每个节点下的分节点建一个查询

#7


是的。如果扩展到无限层,那么就要不断的手动添加循环,我觉得这个方法是不对的。

#8


自己顶

#9


首先是在数据库中写存储过程完成通过一个目录ID找到它的所有子目录ID,
这样一来程序就很容易实现了:
参考
http://expert.csdn.net/Expert/topic/2863/2863032.xml?temp=.92297