通过递归生成树图,速度很慢,有何办法
数据库为SQL SERVER 2005,数据库共有数据12万条,要从中选中合适的数据组成树图,但速度很慢,请帮忙

解决方案 »

  1.   

    先加入第一层,有子类的加一个逗号,当展开某个节点下一层时,去掉逗号,添加这个节点的下一层子类(在onExpanding事件里写)
      

  2.   

    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;
      

  3.   

    12万条
    放到 TTreeView 中,那真是慢得要死。
    改用其他 Tree控件 , 如 TVirtualTree 等,速度才有可能快些。
      

  4.   

    递归生成树只能用在部门之类的小树上
    大规模的树,只能用逐层create的,
    即用一层,开一层,去观察一下 资源流览器,想想怎么玩吧!
      

  5.   

    从2个步骤中本别考虑优化,
     1、取数据:上面提到的逐层取数据是个办法,但同样带来另外的问题,造成数据库频繁访问,每一次访问都造成用户等待。这是lz要考虑的。建议在其他县城中查询数据。 
      2、显示:数据得到后暂存本地内存,需要的时候再声成Node