数据库三列(ID,PID,TEXT)
我想添加到datagridview
跟树的显示效果一样
请问如何做?

解决方案 »

  1.   

    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
      

  2.   

    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  参考
      

  3.   

    不好意思
    忘了说
    我用的是sqlserver...
      

  4.   

    --测试数据
    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
    /*--结果
    |--山东省
      |--烟台市
        |--招远市
      |--青岛市
    |--四会市
      |--清远市
        |--小分市
    --*/
      

  5.   

    --测试数据
    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   小分市
    --*/
      

  6.   

    用treeview比较好,datagridview不好显示。
      

  7.   

    我也是这么想的,可经理说要用datagridview....
    而且是要显示N层...
      

  8.   

    不能用treeview
    经理说就用datagridview,当显示层关系的时候,依次空两格
    比如
    层号 名字
    0    A
    1    --A1
    2    ----A11
    2    ----A12 
    3    ------A121
    层号是计算出来的....