根据数据库结构生成RzCheckTree
时间:2021-07-01 10:21:17
帮助过:31人阅读
TUIOperate.FillTree(RzCheckTree: TRzCheckTree);
var
findq: TADOQuery;
node: TTreeNode;
//这个方法是根据记录的id字段值,查找RzCheckTree上的父节点
function FindParentNode(id:Integer):TTreeNode;
var
i:Integer;
begin
Result :=
nil;
for i :=
0 to RzCheckTree.Items.Count -
1 do
begin
//比较Node的Data值和记录的id值
if Integer(RzCheckTree.Items[i].Data) = id
then
begin
Result :=
RzCheckTree.Items[i];
Break;
end;
end;
end;
begin
findq := TADOQuery.
Create(
nil);
findq.Connection := controler.DataConnect.Connection;
//这里的Connection指向你的数据连接
try
RzCheckTree.Items.BeginUpdate;
RzCheckTree.Items.Clear;
//选出所有记录,并按parentid排序,这样可以保证先添加顶级节点,在下级记录添加时,总能找到父节点
findq.SQL.Text :=
‘SELECT * FROM [Catalog] order by parentid,id‘;
findq.Open;
while not findq.Eof
do
begin
//如果是最顶级,直接添加到RzCheckTree
if findq.FieldByName(
‘parentid‘).AsInteger = -
1 then
//将id值,保存在Node的Data中,以便查找用
RzCheckTree.Items.AddObject(
nil,findq.FieldByName(
‘CatalogName‘).AsString,Pointer(findq.FieldByName(
‘id‘).AsInteger))
else
begin
//查找上级节点
node := FindParentNode(findq.FieldByName(
‘parentid‘).AsInteger);
if node <>
nil then
RzCheckTree.Items.AddChildObject(node,findq.FieldByName(‘CatalogName‘).AsString,Pointer(findq.FieldByName(
‘id‘).AsInteger));
end;
findq.Next;
end;
finally
findq.Free;
RzCheckTree.Items.EndUpdate;
end;
end;
根据数据库结构生成RzCheckTree
标签:效率 执行 tac 结构 addchild items cti upd treenode