将数据库里的数据加入到TreeView中,两个表,主从表,主表中的NAME字段为根节点~!
大概二十个左右~!从表中的NAME字段为字节点加入到相应根节点的下面~~!怎么才能动态的加载到相应的根节点下面~!急,在线等待~!

解决方案 »

  1.   

    var
      rootnode,ChildNode:TTreeNode;
      i:integer;
    begin
      if Query1.Active then query1.close;
      Query1.sql.clear;
      Query1.sql.add(....)//取出主表的name
      Query1.open;
      for i:= 0 to Query1.Recordcount - 1 do
      begin
         RoodbNode := Treeview.items.add(nil,query1['name'])
         RoodNode.imageIndex := 1;
         RootNode.selectIndex ;= 1;
         If Query2.Active then Query2.close;
         Query2.sql.clear;
         Query2.sql.add(...)//取出所有的和主表name对应的记录
         Query2.open;
         for j :=0 to Query2.RecordCount - 1 do
         begin
           ChildNode := Treeview.Item.add(RootNode,query2['??']);
           ChildNode.ImageIndex :=2;
           ChildNode.SelectIndex :=2;
         end;
      end;
      Query1.close;
      Query2.close;
    end;
    随便写了一下,差不多是这个搞法而已
      

  2.   

    我也是这么写的,就是ITEM.ADD的参数不对吧~!~!都加到下面去了,不是子项而都是平级的了~!
      

  3.   

    我建议你不要这样处理,因为这样在窗口一创建的时候,就把主表和从表的数据全部导入到Tree上了。
    如果有一个节点,用户从来不用的话?那么这个数据取下来不是浪费资源了吗?
    我建议:动态的创建节点
    1.取得主表的节点,把主表的节点放到Tree上,在主表节点下创建一个临时节点Temp
    2.在Tree的Expand事件中:判断该节点的第一个子节点是否为Temp,如果是,则删除Temp并把相关从表的数据读出加载到当前节点上.
    3.在第2步中可以使用BeginUpDate和EndUpDate,这边能避免屏幕闪动.