delphi树的一些操作  
官方Delphi 学习QQ群: 682628230(三千人)
频道

delphi树的一些操作


delphi树的一些操作


生成一棵树方法一:
procedure MakeTree(Query: TQuery; TreeView: TTreeView);
var
 List: TStringList;
 Node: TTreeNode;
 Index: Integer;
begin
 TreeView.Items.BeginUpdate;
 try
 TreeView.Items.Clear;
 
List := TStringList.Create;
 try
 List.Sorted := True;
 
while not Query.Eof do
 begin
 if Query.FieldByName('ParentID').AsInteger = 0 then { ParentID=0,顶层节点 }
Node := TreeView.Items.AddChild(nil, Query.FieldByName('Name').AsString)
 else
 begin
 Index := List.IndexOf(Query.FieldByName('ParentID').AsString);
 Node := TreeView.Items.AddChild(TTreeNode(List.Objects[Index]),
 Query.FieldByName('Name').AsString);
 end;
 List.AddObject(Query.FieldByName('ID').AsString, Node);
 Query.Next;
 end;
 finally
 List.Free;
 end;
 finally
 TreeView.Items.EndUpdate;
 end;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
 T: DWORD;
begin
 T := GetTickCount;
 Query1.SQL.Text := 'SELECT * FROM FTree ORDER BY ParentID, ID';
 Query1.Open;
 MakeTree(Query1, TreeView1);
 Label1.Caption := Format('MakeTree所用时间: %d ms', [GetTickCount - T]); 
end;
 
生成一棵树方法二:
 
procedure CreateTree(DataSet: TADOQuery; Tree: TTreeView;
 const table, aid, aname: string; idname: Boolean);
const
 ID_DEPT = 2;
var
 nLevel: Integer;
 pNodes: array[0..1023] of TTreeNode;
 lpID, lpName, s: string;
begin
 if DataSet = nil then Exit;
 if Tree = nil then Exit;
 if table = '' then Exit;
 pNodes[0] := nil;
 Tree.Items.Clear;
 with DataSet do
 begin
 Close;
 SQL.Clear;
 s := Format('select %s, %s from %s order by %s', [aid, aname, table, aid]);
 SQL.Text := s;
 Open;
 if IsEmpty then Exit;
 First;
 while not Eof do
 begin
 lpID := FieldByName(aid).AsString;
 lpName := FieldByName(aname).AsString;
 nLevel := Length(lpID) div ID_DEPT;
 if not idname then
 pNodes[nLevel] := Tree.Items.AddChild(pNodes[nLevel - 1], lpName)
 else
 pNodes[nLevel] := Tree.Items.AddChild(pNodes[nLevel - 1],
 lpID + '-' + lpName);
 Next;
 end;
 end;
end;
 
遍历一棵树:
procedure TForm1.Button1Click(Sender: TObject);
var
 node: ttreenode;
begin
 node := treeview1.Items.GetFirstNode;
 while node <> nil do
 begin
 node := node.GetNext;
 end;
end;

推荐分享
图文皆来源于网络,内容仅做公益性分享,版权归原作者所有,如有侵权请告知删除!
 

Copyright © 2014 DelphiW.com 开发 源码 文档 技巧 All Rights Reserved
晋ICP备14006235号-8 晋公网安备 14108102000087号

执行时间: 0.40075206756592 seconds