您的位置:程序门 -> delphi -> 数据库相关



delphi+sql2000树形结构


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


delphi+sql2000树形结构[已结贴,结贴人:dnvypmypm]
发表于:2007-08-18 09:49:16 楼主
我想做一个树形结构的查询功能,就是像csdn一样的,我用了   adodataset控件连接sql数据库,但是我的全面显示,没有下一级的
procedure   tform_department_staff.button1click(sender:   tobject);
const
    id_dept   =   2;
var
    nlevel:   integer;
    pnodes:   array[0..1023]   of   ttreenode;
    lpid,   lpname:   string;
begin
    adodataset1.close;
    adodataset1.commandtext   :=   'select   *   from   department   order   by   id';
    adodataset1.open;
    pnodes[0]   :=   nil;
    treeview1.items.clear;
    with   adodataset1.recordset   do
        while   not   eof   do
        begin
            lpid   :=   fields['id'].value;
            lpname   :=   fields['department'].value;
            nlevel   :=   length(lpid)   div   id_dept;
            pnodes[nlevel]   :=   treeview1.items.addchild(pnodes[nlevel   -   1],   lpname);
            movenext;
        end;
end;


表department中有:01,财务部;02,销售部;0101,五精仓库;0201,成品仓库;010101,五精一队;

我想显示成:
财务部
        五精仓库
                五精一队
销售部
        成品仓库

但是显示的结果是:
财务部
五精仓库
五精一队
销售部
成品仓库


全部在一级上,请各位大哥帮忙看看,还有就是我在点击显示结果的时候怎么把点击的数据传给一个文本

发表于:2007-08-18 10:02:071楼 得分:20
拿这个做参考
var      
                list:tstringlist;      
                node:ttreenode;      
                index:integer;      
------------------------      
cdstree.commandtext:=   "select       *       from       table       order       by       上级id,id   "  
        treeview.items.beginupdate;      
                try      
                                treeview.items.clear;      

                                list:=               tstringlist.create;      
                                try      
                                                list.sorted:=               true;      
                                                cdstree.first;      
                                                while               not               cdstree.eof               do      
                                                begin      
                                                                //如果是顶接点      
                                                                if               cdstree.fieldbyname(       "你的上级id       ").asinteger=               0               then      
                                                                begin      
                                                                                node:=treeview.items.addchild(nil,               cdstree.fieldbyname(mname).asstring)      
                                                                end               else      
                                                                begin      
                                                                                index:=               list.indexof(cdstree.fieldbyname(       "你的上级id       ").asstring);      
                                                                                node:=               treeview.items.addchildfirst(ttreenode(list.objects[index]),      
                                                                                                cdstree.fieldbyname(       "你的字段名称       ").asstring);      
                                                                end;      
                                                                list.addobject(cdstree.fieldbyname(       "id       ").asstring,               node);      
                                                                cdstree.next;      
                                                end;      
                                finally      
                                                list.free;      
                                                cdstree.close;      
                                end;      
                finally      
                                treeview.items.endupdate;      
                end;
发表于:2007-08-18 11:06:332楼 得分:10
楼上的写的代码,怎么这么像我多年前写的呢?

发表于:2007-08-18 11:09:013楼 得分:10
呵呵,以前也是从网上查来的
感觉递归很慢,
这方法不错
发表于:2007-08-18 12:07:454楼 得分:0
procedure       tform_department_staff.button1click(sender:       tobject);  
const  
        id_dept       =       2;  
var  
        nlevel:       integer;  
        pnodes:       array[0..1023]       of       ttreenode;  
        lpid,       lpname:       string;  
begin  
        adodataset1.close;  
        adodataset1.commandtext       :=       "select       *       from       department       order       by       id   ";  
        adodataset1.open;  
        pnodes[0]       :=       nil;  
        treeview1.items.clear;  
        with       adodataset1.recordset       do  
                while       not       eof       do  
                begin  
                        lpid       :=       fields[   "id   "].value;  
                        lpname       :=       fields[   "department   "].value;  
                          edit1.text:=lpid;
                        nlevel       :=       length(trim(edit1.text))       div       id_dept;  
                        pnodes[nlevel]       :=       treeview1.items.addchild(pnodes[nlevel       -       1],       lpname);  
                        movenext;  
                end;  
end;  

我已经解决了,发给大家,这个可以创建多层次的,代码也少,也易懂


快速检索

最新资讯
热门点击