Delphi 中递归生成TreeView节点的方法

在数据库中建一张表,包含:NodeName,NodeId,ParentId 3个字段,具体什么含义,一看就知了。

过程如下:

procedure TFRM_channel.formtreenode(parentid:string;TreeView1: TTreeView;parentnode:TTreeNode;ADOQuery1:TADOQuery);
var
    i:integer;
    treenode:TTreeNode;
begin
    i:=0;
    ADOQuery1.First;
    while not ADOQuery1.Eof do
      begin
         if ADOQuery1.FieldByName('ParentId').AsString=parentid then
           begin
              treenode:=TreeView1.Items.AddChild(parentnode,ADOQuery1.fieldbyname('NodeName').AsString);
              formtreenode(ADOQuery1.fieldbyname('NodeId').AsString ,TreeView1,treenode,ADOQuery1);
           end;
          inc(i);
          ADOQuery1.First;
          ADOQuery1.MoveBy(i);
      end;


end;

在调用如下,如在窗体的create事件中:

procedure TFRM_channel.FormCreate(Sender: TObject);
var
  TreeNode1:TTreeNode;
  i:integer;
  nodename:string;
  nodeid:string;
  parentid:string;
  cmdstr:string;

begin
//初始化树形节点
   ADOQuery1.ConnectionString:=mypublic.datastr;

   cmdstr:='select * from ChanTreeNode order by ParentId ,NodeId asc';
   ADOQuery1.Close;
   ADOQuery1.SQL.Clear;
   ADOQuery1.SQL.Add(cmdstr);
   ADOQuery1.Open;

       TreeNode1:=nil;
     formtreenode('000',TreeView1,TreeNode1,ADOQuery1);
end;

每天早上敲醒自己的不是闹钟,是夢想!
原文地址:https://www.cnblogs.com/yplong/p/2361316.html