递归问题

benniaoyaofei 2007-07-09 04:36:07
数据库三列(ID,PID,TEXT)
我想添加到datagridview
跟树的显示效果一样
请问如何做?
...全文
260 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
benniaoyaofei 2007-07-11
  • 打赏
  • 举报
回复
不好意思,我还是没弄明白...
SassyBoy 2007-07-10
  • 打赏
  • 举报
回复
我第一个sql不就是了?
benniaoyaofei 2007-07-10
  • 打赏
  • 举报
回复
不能用treeview
经理说就用datagridview,当显示层关系的时候,依次空两格
比如
层号 名字
0 A
1 --A1
2 ----A11
2 ----A12
3 ------A121
层号是计算出来的....
SassyBoy 2007-07-10
  • 打赏
  • 举报
回复
那就放个treeview在模版里吧
benniaoyaofei 2007-07-10
  • 打赏
  • 举报
回复
我也是这么想的,可经理说要用datagridview....
而且是要显示N层...
SassyBoy 2007-07-10
  • 打赏
  • 举报
回复
用treeview比较好,datagridview不好显示。
SassyBoy 2007-07-10
  • 打赏
  • 举报
回复
--测试数据
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)
DECLARE @Level int
SET @Level=0
INSERT @t_Level SELECT ID,@Level
FROM @t
WHERE PID IS NULL
WHILE @@ROWCOUNT>0
BEGIN
SET @Level=@Level+1
INSERT @t_Level SELECT a.ID,@Level
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.Level,b.ID
/*--结果
ID PID Name
------- --------- ----------
001 NULL 山东省
005 NULL 四会市
002 001 烟台市
003 001 青岛市
006 005 清远市
004 002 招远市
007 006 小分市
--*/
SassyBoy 2007-07-10
  • 打赏
  • 举报
回复
--测试数据
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 SPACE(b.Level*2)+'|--'+a.Name
FROM @t a,@t_Level b
WHERE a.ID=b.ID
ORDER BY b.Sort
/*--结果
|--山东省
|--烟台市
|--招远市
|--青岛市
|--四会市
|--清远市
|--小分市
--*/
xuan.ye 2007-07-10
  • 打赏
  • 举报
回复
两层还比较好做,层数多了,就不大好办了,还是用导航控件来的方便
benniaoyaofei 2007-07-10
  • 打赏
  • 举报
回复
fuda_1985 2007-07-09
  • 打赏
  • 举报
回复

benniaoyaofei 2007-07-09
  • 打赏
  • 举报
回复
不好意思
忘了说
我用的是sqlserver...
qery 2007-07-09
  • 打赏
  • 举报
回复
DEPTID PAREDEPTID NAME
NUMBER NUMBER CHAR (40 Byte)
部门id 父部门id(所属部门id) 部门名称
通过子节点向根节点追朔.
select * from persons.dept start with deptid=76 connect by prior paredeptid=deptid
通过根节点遍历子节点.
select * from persons.dept start with paredeptid=0 connect by prior deptid=paredeptid

参考
confei 2007-07-09
  • 打赏
  • 举报
回复
select c.Fid,c.Ftxt from dbo.TTree c
where c.Pid in
(select distinct b.Pid from dbo.TTree b) or c.pid is null
order by c.pid

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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