在使用TreeView的过程中,由于其中数据太多,初始化要浪费很多时间,有没有比较快捷的方法(如先在Stream中创建,再传到TreeView中)?最好有源码。

解决方案 »

  1.   

    初始化时不需要把所有节点的信息都读出来,而只需显示第一层节点的信息,只有当需要展开某个节点时才将那个节点的子节点读出来并显示,可以在treeview的OnExpanding事件里写。
      

  2.   

    在treeview的OnExpanding事件里写加几个自己写的函数就行了比如:procedure Ttj_snw.deletetemp(node: Ttreenode);
    var
       Tempnode: Ttreenode;
    begin
      if (node.count=1) then
      begin
        tempnode:=node.getFirstChild;    //检验当前节点的子节点
        if (tempnode.text='temp') then   //如果节点为‘temp’则删触
          tempnode.Delete;
       end;end;procedure Ttj_snw.addchildren(node: Ttreenode);
    var
       s :string;
       tempnode :Ttreenode;
    begin
      s:=node.text;
      {
      还可以通过node.parent.text访问上一呈node
       }
      deletetemp(node);
      DataModule_main.ADOQuery_tj5.close;
      DataModule_main.ADOQuery_tj5.sql.clear;
      DataModule_main.ADOQuery_tj5.sql.add('DECLARE @s char(50) SELECT @s = jgbm FROM department WHERE (rtrim(ltrim(jgname)) ='''+trim(s)+''') SELECT jgname FROM department WHERE jgbm LIKE rtrim(ltrim(@s))+'+'''__'''+' ORDER BY jgbm');
      DataModule_main.ADOQuery_tj5.open;
      
     while not DataModule_main.ADOQuery_tj5.EOF do
       begin
        tempnode:=treeview1.items.addchild(node,DataModule_main.ADOQuery_tj5.fieldbyname('jgname').asstring);
        treeview1.items.addchild(tempnode,'temp');
        DataModule_main.ADOQuery_tj5.next;
       end;
    给分~~~~
      

  3.   

    procedure Ttj_snw.TreeView1Expanding(Sender: TObject; Node: TTreeNode;
      var AllowExpansion: Boolean);
    begin
    {          按级别产生动作
    case(node.Level) of
      0:if(node.count<=1) then addchildren(node);
      1:if(node.count<=1) then addchildren(node);
      end;
    }
    if(node.count<=1) then addchildren(node);
    name:=trim(node.Text);
    edit1.Text:=name;
    end;
      

  4.   

    你用一个DBTree树型控制就快了
    因为该控件是和数据链接的,所以就快了