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;
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;
放到 TTreeView 中,那真是慢得要死。
改用其他 Tree控件 , 如 TVirtualTree 等,速度才有可能快些。
大规模的树,只能用逐层create的,
即用一层,开一层,去观察一下 资源流览器,想想怎么玩吧!
1、取数据:上面提到的逐层取数据是个办法,但同样带来另外的问题,造成数据库频繁访问,每一次访问都造成用户等待。这是lz要考虑的。建议在其他县城中查询数据。
2、显示:数据得到后暂存本地内存,需要的时候再声成Node