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



各位大哥,一个treeview 跟dbgrid1关联的问题,小弟还是菜鸟,分也不多,只有30分,还请各位大哥相助!!!!


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


各位大哥,一个treeview 跟dbgrid1关联的问题,小弟还是菜鸟,分也不多,只有30分,还请各位大哥相助!!!![已结贴,结贴人:zhuwei923198101]
发表于:2007-09-17 15:31:10 楼主
一个treeview,一个dbgrid,和adoquery,datasource1通过单击treeview的结点,让dbgrid显示结点相关联的的数据。      
    如树的结构如下      
        甲公司
                a部门  
                b部门    
                        c部门  
                                  d部门  
                i部门
                     
    乙公司    
                f部门  
                  h部门    
                         
其中有两个表:
      表一:epdept   (部门结构表)
              dpid   (int)       dpna   (varchar)       dptyp(varchar)       dpprid(int)
              01                           甲公司                             001                               nill
              02                           a部门                               001001                           01
              03                           b部门                               001002                           01
              04                           c部门                               001002001                     03
              05                           d部门                               001002001001               04
              06                           乙公司                             002                                 nill
              07                           f部门                               002001                           06
              08                           h部门                               002002                           06
              09                           i部门                               001003                           02
    表二:employee   (员工信息表)
            epid                     epna                       dpid
            1                             张三                           05
            2                             李四                           09
             
 
    现在我已经根据epdept   中的dpid   、dpprid字段生成了树型结构。我现在的问题是:
我单击   “甲公司”   节点是,需要在dbgrid中显示其甲公司下各部门的员工信息,但不要显示乙公司各部门的信息??
或者说点“b部门”时只显示其下的所属员工,而不显示其他部门的员工。。。。。。。。
急切等待中。。。。。。
发表于:2007-09-17 16:17:031楼 得分:0
各位大哥,难道就没有谁愿意来帮帮我吗??
发表于:2007-09-17 16:42:572楼 得分:20
思路是在部门树节点   treenode.data   域存储部门相关信息,核心是deptid,然后在树节点变化时,刷新员工记录。
定义部门数据结构
type
    pdeptinfo=^tdeptinfo;
    tdeptinfo=record
        dpid:   integer;
        dpna:   string;
        dpprid:   integer;
    end;

假定部门树名称   tvdept
生成树的时候,在添加节点的时候需要稍微做一点处理:

procedure   destroytree();
var
    i:   integer;
begin
    tvdept.onchange   :=   nil;
    for   i:=0   to   tvdept.items.count-1   do   dispose(pdeptinfo(tvdept.items[i].data));
    tvdept.items.clear;
end;

procedure   builddepttree();
var
    node:   ttreenode;
    lpdept:   pdeptinfo;
begin
    destroytree();

    添加树节点
    new(lpdept);
    lpdept^.dpid   :=   ...
    ...
    node.data   :=   lpdept;
   
    tvdept.onchange   :=   onrefreshemployee;
end;

procedure   onrefreshemployee(sender:   tobject;   node:   ttreenode);
var
    strsql:   string;
begin
    if   tvdept.selected   <>   nil   then
        strsql   :=   'select   *   from   employee   where   dpid='+inttostr(pdeptinfo(tvdept.selected.data)^.dpid
    else
        strsql   :=   'select   *   from   employee   where   1 <0';   //没选中部门,则没有任何人员记录。
    生成记录集
end;

最后,模块关闭的时候,记得把树销毁回收资源!
发表于:2007-09-18 09:29:583楼 得分:0
如果这个节点下面还有子节点,怎么办?
发表于:2007-09-18 09:35:224楼 得分:0
自己东东脑筋吧,不要不加思索就问,一个节点如果下面还有子节点,所有子节点可遍历得到,其对应的部门id也是可以获取得到,如果你想把归属部门人员全部罗列,那就用   dpid=节点1.部门id   or   dpid=节点2.部门id...
发表于:2007-09-18 09:41:285楼 得分:0
学习一下!
发表于:2007-09-18 11:19:026楼 得分:10
只是个数据查询的问题。

              03                           b部门                               001002                           01  
              04                           c部门                               001002001                     03  
              05                           d部门                               001002001001               04  
假设现在选中的是b部门,根据dptyp   like'001002%'可以查询得到其子部门   001002001和001002001001
最终得到dpid=03,04,05,然后根据得到的这三个dpid到employee中查询就可以到的你想要的结果了。

select   *   from   employee   where     dpid   in(select   dpid   from   epdept   where   dptyp   like'001002%')
发表于:2007-10-03 12:20:107楼 得分:0
问题解决了,谢谢,各位,


快速检索

最新资讯
热门点击