type orgVO=record PK_DEPART:string; DEPCODE:string; DEPNAME:string; DEPTDESC:string; DEPPHONE:string; DEPADDR:string; PARENTID:string; LEVEL:integer; end;
递归函数: procedure Tdlg_org.dg(vos: array of zzorgVO;tnode:TTreeNode;str:string;sum:integer); var i:integer; s:string; snode:TTreeNode; begin for i:= 0 to sum-1 do begin if CompareStr(trim(vos[i].PARENTID),trim(vos[i].DEPCODE))=0 then begin showmessage(''''请检查上下级编码是否一致,否则会造成死循环''''); exit; self.Close; end; if (vos[i].PARENTID<>'''''''') and (CompareStr(trim(vos[i].PARENTID),trim(str))=0) then begin s:=vos[i].DEPCODE; snode:=Treeview1.items.addchild(tnode,vos[i].DEPNAME); dg(vos,snode,s,sum); end; end; end;
调用递归的方法: procedure Tdlg_org.frushTree; var mysql:string; tt:TDataSource; j:integer; vos:array of zzorgVO; vo:zzorgVO; RootNode:TTreeNode; begin mysql:=''''select PK_DEPART,DEPCODE,DEPNAME,DEPTDESC,DEPPHONE,DEPADDR,PARENTID,LEVEL1 from BD_DEPART''''; tt:=SQLzzorgDMO.Create.queryAll(mysql); //组成全部数据的VO j:=1; setlength(vos,tt.DataSet.RecordCount); while not tt.DataSet.Eof do begin vo.PK_DEPART:=tt.DataSet.Fields.Fields[0].AsString; vo.DEPCODE:=tt.DataSet.Fields.Fields[1].AsString; vo.DEPNAME:=tt.DataSet.Fields.Fields[2].AsString; vo.DEPTDESC:=tt.DataSet.Fields.Fields[3].AsString; vo.DEPPHONE:=tt.DataSet.Fields.Fields[4].AsString; vo.DEPADDR:=tt.DataSet.Fields.Fields[5].AsString; vo.PARENTID:=tt.DataSet.Fields.Fields[6].AsString; vo.LEVEL:=strtoint(tt.DataSet.Fields.Fields[7].AsString); vos[j-1]:=vo; inc(j); tt.DataSet.Next; end; //写入数组 TreeView1.Items.Clear; for j:=0 to high(vos) do begin if trim(vos[j].PARENTID)='''''''' then begin RootNode:=TreeView1.Items.Add(nil,vos[j].DEPNAME); //调用递归 dg(vos,RootNode,vos[j].DEPCODE,tt.DataSet.RecordCount); end; end; end;
没有相关教程
|