日期:2014-05-18  浏览次数:20543 次

从数据库 读出Treeview的问题 请教
要读出的Treeview大概是
A
    A1  
    A2  
    A3  
    A4  
    A5
        AA
                AA1  
AA2  
AA3  
AA4  
          AB
AB1  
AB2  
AB3  
AB4  
          AC  
AC1  
AC2  
B  
    B1  
    B2  
    B3  
    B4  
    B5  
    B6  
C  
    C1  
    C2  
    C3  
    C4  
    C5  
    C6  
          CA
CA1  
CA2  
          CB
CB1  

我想用深度优先遍历   一个一个往这个树上加
可是   我想以A1   A2   A3   AA1这样排序     可是不行

请教大家还有什么方法  
谢谢
分不多   真心请教

------解决方案--------------------

邹大侠的


--测试数据
create table tb(
id int identity(1,1) not null constraint PK_tb primary key clustered,
pid int,name varchar(20))
insert tb select 0, '中国 '
union all select 0, '美国 '
union all select 0, '加拿大 '
union all select 1, '北京 '
union all select 1, '上海 '
union all select 1, '江苏 '
union all select 6, '苏州 '
union all select 7, '常熟 '
union all select 6, '南京 '
union all select 6, '无锡 '
union all select 2, '纽约 '
union all select 2, '旧金山 '
go


--1.自定义函数--获取编码累计
create function f_getmergid(@id int)
returns varchar(8000)
as
begin
declare @re varchar(8000),@pid int

--为了数字排序正常,需要统一编码宽度
declare @idlen int,@idheader varchar(20)
select @idlen=max(len(id))
,@idheader=space(@idlen)
from tb

--得到编码累计
set @re=right(@idheader+cast(@id as varchar),@idlen)
select @pid=pid from tb where id=@id
while @@rowcount> 0
select @re=right(@idheader+cast(@pid as varchar),@idlen)+ ', '+@re
,@pid=pid from tb where id=@pid
return(@re)
end
go


select * from tb order by dbo.f_getmergid(id)
go