当然,子节点下也可能还有子节点,都是调用同一个存储过程。就是把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);
}
}
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
第二个存储过程是用来判断是否有子节点的。
所以说一次存储过程只能得到一个节点的子节点。
一个就是来读取MENU_ID MENU_NAME的,但是必须要父节点的menu_id作为参数。不然不行。所以第一层的时候是默认-99
第二个存储过程是用来判断是否有子节点的。
所以说一次存储过程只能得到一个节点的子节点。
#6
我也问了差不多的问题,我认为每个节点下的分节点建一个查询
#7
是的。如果扩展到无限层,那么就要不断的手动添加循环,我觉得这个方法是不对的。
#8
自己顶
#9
首先是在数据库中写存储过程完成通过一个目录ID找到它的所有子目录ID,
这样一来程序就很容易实现了:
参考
http://expert.csdn.net/Expert/topic/2863/2863032.xml?temp=.92297
这样一来程序就很容易实现了:
参考
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);
}
}
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
第二个存储过程是用来判断是否有子节点的。
所以说一次存储过程只能得到一个节点的子节点。
一个就是来读取MENU_ID MENU_NAME的,但是必须要父节点的menu_id作为参数。不然不行。所以第一层的时候是默认-99
第二个存储过程是用来判断是否有子节点的。
所以说一次存储过程只能得到一个节点的子节点。
#6
我也问了差不多的问题,我认为每个节点下的分节点建一个查询
#7
是的。如果扩展到无限层,那么就要不断的手动添加循环,我觉得这个方法是不对的。
#8
自己顶
#9
首先是在数据库中写存储过程完成通过一个目录ID找到它的所有子目录ID,
这样一来程序就很容易实现了:
参考
http://expert.csdn.net/Expert/topic/2863/2863032.xml?temp=.92297
这样一来程序就很容易实现了:
参考
http://expert.csdn.net/Expert/topic/2863/2863032.xml?temp=.92297