在做一个项目的时候,多次用到了递归的方法画树形结构,在网上search了一下,找到的大多都是使用record的方法做的,在csdn的一个帖子上发现了篇不用record方法的递归画树形结构的帖子,整理了一下,和大家共享。
//递归方法画树
procedure Addtree(theNode: TTreeNode; parentID:integer; mytree:TRzCheckTree; conn:TAdoconnection);
var
I:integer;
qry:TAdoquery;
node: TTreeNode;
StrSql: String;
begin
//根据业务规则组织sql语句
StrSql := 'Select cUnitCode, cShortName, Id, nFatherID From Report_UnitTable Where IisTrans = 1';
StrSql := StrSql + ' And nFatherID = ' + IntToStr(parentID) + ' order by cOrderby, nFatherID ';
Qry:=Tadoquery.create(nil);
qry.Connection:=conn;
qry.sql.clear;
qry.sql.add(StrSql);
qry.active:=true;
qry.first;
for i:=0 to qry.recordcount-1 do
begin
node := mytree.Items.addchild(theNode, Trim(qry.FieldByName('cunitcode').AsString)+Trim(qry.FieldByName('cShortName').AsString));
Addtree(node, qry.fieldbyname('Id').asinteger, mytree, conn); //递归
qry.Next;
end;
qry.free;
end;
//调用的时候,要先给nFatherID赋值。
//调用递归方法画树
AddTree(nil, FatherID, RzCheckTree1, DM.ADOConnection1);