📄 递归自动生成层次树.txt
字号:
自动生成分层树
数据库结构
id parent name .....flag
1 0 str 1
2 1 str 2
flag 是标记字段,你可以标记不同的内容,
pinfo=^nodepro;
nodepro=record
id:integer;
str:string;
flag:integer;
end;
select * from flb
where (parent=:@parentid) and (flag=:@flag)
order by flb_id
Faddtreenode(Mtree:Ttreeview;Mnode:Ttreenode;fieldid,fieldstr,fieldflag:string;parentid,flagid:integer);
var
childnum:integer;
nd,nd1:Tfctreenode;
begin
with mydata.Aqy_flb do
try
if active then close;
parameters[0].Value:=parentid;
parameters[1].Value:=flagid;
prepared:=true;
open;
if not isempty then
begin
disablecontrols;
first;
nd:=nil;
while not eof do
begin
new(info);
info.id:=fieldbyname(fieldid).Asinteger;
info.str:=fieldbyname(fieldstr).asstring;
info.flag :=fieldbyname(fieldflag).AsInteger ;
nd:=Mtree.Items.AddChildobject(Mnode,info.str,info);
next;
end;
nd1:=nd.parent; //返回到所加节点的父节点
nd:=nd1.GetFirstChild; //父节点的第一个叶节点
for childnum:=0 to nd1.Count-1 do
begin
Faddtreenode(Mtree,nd,fieldid,fieldstr,fieldflag,Pinfo(nd.data)^.id,flagid);
nd:=nd.GetNextSibling; // 叶节点的同级节点
end;
enablecontrols;
end else exit ;
prepared:=false;
except
messagebox(handle,'操作数据时出现错误!','错误',mb_ok);
end;
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -