高手快来帮帮!!!!!

XMMXBB 2009-04-16 08:37:20
问题是这样的,sql2000数据库中一张表结构如下:
nodeid parentid
A NULL
A1 A
A11 A1
B NULL
B11 B
现在要在左边生成树型菜单,小弟我用一般的方法先查询parentid为null的nodeid也就是第一级节点,然后在递归调用生成树函数,结果把sql2000服务器给弄死了,不知道是我程度的问题还是性能的问题,希望各位高手指点下。最好能有实现代码供参考。谢谢!
...全文
99 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
XMMXBB 2009-04-16
  • 打赏
  • 举报
回复
请问下各位我用6楼那们大哥的方法可行吗?
maggie3256 2009-04-16
  • 打赏
  • 举报
回复
将数据生成xml文件,然后treeview控件绑定xml文件
XMMXBB 2009-04-16
  • 打赏
  • 举报
回复
那我应该怎么办?确实是要生成树型菜单啊。快帮帮忙,各位,多指点下。
路人乙e 2009-04-16
  • 打赏
  • 举报
回复
看楼主的代码是要连接数据库上万次!
wsj1983920 2009-04-16
  • 打赏
  • 举报
回复
up
zjybushiren88888 2009-04-16
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 xfreyes 的回复:]
记录有5万到10万条。
这么多记录要生成树。。
即使没有死循环跑瘫服务器也时可以理解的
[/Quote]
.....
xfreyes 2009-04-16
  • 打赏
  • 举报
回复
记录有5万到10万条。
这么多记录要生成树。。
即使没有死循环跑瘫服务器也时可以理解的
zzxap 2009-04-16
  • 打赏
  • 举报
回复
[code=SQL]

深度排序
DECLARE @t TABLE(ID char(3),PID char(3),Name nvarchar(10))
INSERT @t SELECT '001',NULL ,'山东省'
UNION ALL SELECT '002','001','烟台市'
UNION ALL SELECT '004','002','招远市'
UNION ALL SELECT '003','001','青岛市'
UNION ALL SELECT '005',NULL ,'四会市'
UNION ALL SELECT '006','005','清远市'
UNION ALL SELECT '007','006','小分市'

--深度排序显示处理
--生成每个节点的编码累计(相同当单编号法的编码)
DECLARE @t_Level TABLE(ID char(3),Level int,Sort varchar(8000))
DECLARE @Level int
SET @Level=0
INSERT @t_Level SELECT ID,@Level,ID
FROM @t
WHERE PID IS NULL
WHILE @@ROWCOUNT>0
BEGIN
SET @Level=@Level+1
INSERT @t_Level SELECT a.ID,@Level,b.Sort+a.ID
FROM @t a,@t_Level b
WHERE a.PID=b.ID
AND b.Level=@Level-1
END

--显示结果
SELECT a.*
FROM @t a,@t_Level b
WHERE a.ID=b.ID
ORDER BY b.Sort
/*--结果
ID PID Name
------ --------- ----------
001 NULL 山东省
002 001 烟台市
004 002 招远市
003 001 青岛市
005 NULL 四会市
006 005 清远市
007 006 小分市
--*/

--查询指定节点及其所有子节点的函数
CREATE FUNCTION f_Cid(@ID char(3))
RETURNS @t_Level TABLE(ID char(3),Level int)
AS
BEGIN
DECLARE @Level int
SET @Level=1
INSERT @t_Level SELECT @ID,@Level
WHILE @@ROWCOUNT>0
BEGIN
SET @Level=@Level+1
INSERT @t_Level SELECT a.ID,@Level
FROM tb a,@t_Level b
WHERE a.PID=b.ID
AND b.Level=@Level-1
END
RETURN
END
GO

--调用函数查询002及其所有子节点
SELECT a.*
FROM tb a,f_Cid('002') b
WHERE a.ID=b.ID
/*--结果
ID PID Name
------ ------- ----------
002 001 烟台市
004 002 招远市
--*/
[/CODE]
XMMXBB 2009-04-16
  • 打赏
  • 举报
回复
代码如下:
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面

if(!Page.IsPostBack)
{
ComponentArt.Web.UI.TreeViewNode RootNode = new ComponentArt.Web.UI.TreeViewNode();
RootNode.Text="树型结构测试";
RootNode.Value="0"; //代表最顶级菜单
RootNode.Target = "Main";
RootNode.NavigateUrl="";
RootNode.CssClass="";
RootNode.ImageUrl="../Images/lines/house.gif";
MenuTRV.Nodes.Add(RootNode);
CreateNode(RootNode);
RootNode.Expanded = true;
}
}
private void CreateNode(ComponentArt.Web.UI.TreeViewNode treeNode)
{
DataTable dt =Test.LibraryTypeImple.QueryAll();//查找一级节点
if (dt.Rows.Count>=1)
{
for(int i=0;i<dt.Rows.Count;i++)
{
ComponentArt.Web.UI.TreeViewNode childNode = new ComponentArt.Web.UI.TreeViewNode();
childNode.Value = dt.Rows[i]["TYPE_NO"].ToString();
childNode.Target="";
childNode.NavigateUrl="";
childNode.Text = dt.Rows[i]["TYPE_NO"].ToString();
childNode.ImageUrl="../Images/lines/plus.gif";
childNode.ExpandedImageUrl="../Images/lines/minus.gif";
treeNode.Nodes.Add(childNode);
CreateChildNode(childNode,dt.Rows[i]["TYPE_NO"].ToString());
}
}
}
private void CreateChildNode(ComponentArt.Web.UI.TreeViewNode childchildNode,string type_no)
{
DataTable dTable=Test.LibraryTypeImple.QueryByTypeParent(type_no);//查找一级结点的子结点
if (dTable.Rows.Count>=1)
{
for(int i=0;i<dTable.Rows.Count;i++)
{
ComponentArt.Web.UI.TreeViewNode childNode = new ComponentArt.Web.UI.TreeViewNode();
childNode.Value = dTable.Rows[i]["TYPE_NO"].ToString();
childNode.Target="";
childNode.NavigateUrl="";
childNode.Text = dTable.Rows[i]["TYPE_NO"].ToString();
childNode.ImageUrl="../Images/lines/plus.gif";
childNode.ExpandedImageUrl="../Images/lines/minus.gif";
childchildNode.Nodes.Add(childNode);
CreateChildNode(childNode,dTable.Rows[i]["TYPE_NO"].ToString());
}
}


}
sayluyun 2009-04-16
  • 打赏
  • 举报
回复
贴点你写的代码啊··
XMMXBB 2009-04-16
  • 打赏
  • 举报
回复
哦,忘记说了,记录有5万到10万条。
kkun_3yue3 2009-04-16
  • 打赏
  • 举报
回复
贴下代码
dd__dd 2009-04-16
  • 打赏
  • 举报
回复
是不是写死循环了啊?
代码贴下

62,242

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧