我有一张叫部门信息的表,里面包括的内容有部门编码、部门名称等。
我在TreeView里将部门信息按照隶属关系进行排列,形如
_所有部门
  |_人力资源部
  |   |_教育科
  |   |_培训科
  |
  |_行政部
  |   |_管理科
  .....我希望在点击某一个节点时,会动态组成一个SQL语句来查询该部门的员工信息,
在员工信息的表里与之相对应的是部门编码,比如某个员工属于人力资源部的教育科,而该教育科的部门编码是0101,则员工信息记录里的部门编码字段就是0101
现在的问题是,我在点击某一个节点时,能够获得部门名称,但我希望是用部门编码来组成SQL语句,
一种很笨的方法是,先根据部门名称来查询出部门编码,再用这个部门编码与员工信息相对应。
请问有没有一种方法,可以在生成这个部门树的同时,能够将部门编码也放在节点的信息里,
这样,我在点击节点时,能够方便的获得编码。或者说碰到这类问题,大家有没有更好的解决方法。
先谢谢各位了。

解决方案 »

  1.   

    用不着“挑战”,每个节点有一个Data属性,你想存什么就存什么
      

  2.   

    使用TTreeNode的AddObject方法,把附属信息放到一个类里。
      

  3.   

    TO SeaWave(NoSound) :
    Data属性是个指针类型呢,具体怎么用呢,能不能写个示例?
      

  4.   

    TO shengzi101(绳子)   
     
     
       使用TTreeNode的AddObject方法,把附属信息放到一个类里。
      
     --------------------------
    我没有找到你说的AddObject方法,能不能解释得详细一些?
      

  5.   

    Data属性是个指针类型,可以指向你定义的结构。
      

  6.   

    你可以定义个结构:
    PMyNodeData = ^TMyNodeData;
    TMyNodeData = record
      Code: String;
      ...
    end;var
      P: PMyNodeData;
    begin
      P := new(PMyNodeData);
      P^.Code := 'aaaaa';
    ...
      Node.Data := P;
    ...
    end;
    记的删除接点(窗体Destroy)的时候别忘记了释放指针
      

  7.   

    TO ssq237712(流亡帅哥) :
    你的方法,应用在对一个节点的处理上是可以的,
    我现在希望的是在对部门树进行初始化(也就是生成部门树)时将部门编码就放在节点里,你的做法
    是不是每个节点都要对应一个结构指针呢?
      

  8.   


    就用 TreeNode 的 Data
    可以指向一个 record 也可指向一个 Class的实例。很简单的。
      

  9.   

    我现在希望的是在对部门树进行初始化(也就是生成部门树)时将部门编码就放在节点里,你的做法
    是不是每个节点都要对应一个结构指针呢?
    也不一定。不需要附加信息的就设为 nil 就可以
    执行前先判断一下如果只保存 Integer 编号。
    也可以用强行转化
    把 Integer 转为 Pointer 保存在 Data 里。
    不过最好还是用 record 。方便以前扩展。
      

  10.   

    谢谢 QSmile(RedFox) 
    你的想法和我不谋而合,我已经采用了你说的强制转化类型的方法,我知道这不是很好的方法,但因为编码全部是数字型的,应该问题不大。
    我看了好像也没有其它可以用来借助的属性了。其实我是想最好是存放STRING型的,不知有没有更好的方法?
      

  11.   

    更好(也更复杂)的办法是:自己写TTreeNode的继承类作为TreeView的节点,你想咋地就咋地。
      

  12.   

    http://community.csdn.net/Expert/topic/3385/3385268.xml?temp=.980343
    帮忙看看
      

  13.   

    每个节点都有固定的且唯一的ID值吧
    var
      myNode:TTreeNode;myNode.StateIndex := QryTmp.FieldByName('FitemId').AsInteger;这样就每个节点都有一个ID值了
    点击节点的时候就可以直接读取
    不知道符合你的要求没有
      

  14.   

    不要过分的利用data,否则资源浪费很严重,只把重要的id放在data里面,用户点击的时候动态获得数据,还要记住,data要自己释放,在free的时候,系统不会释放data的,因为他不知道你的指针指向的是什么类型空间
      

  15.   

    TO anbangs(菜鸟邦) :
    StateIndex 被借用了没有其它影响吧。会不会占了系统定义的东西,或者说我放进去的值会被系统修改了?
      

  16.   

    to anbangs(菜鸟邦)
    呵呵,终于找到一个知音,我就是用StateIndex,只要你程序中不写没有问题,系统不会修改,况且还需要定义stateimage才能改啊,该方法只能用于integer型
      

  17.   

    TO jack_4826(天下无双) 
    你刚才说的要定义stateimage才能改是什么意思?那我要借用StateIndex时也要定义stateimage吗?