递归加载树形列表的过程(函数)

  1. //采用递归方法,D7编译调试通过。
  2. //数据采用ADOQuery读取,并将数据暂存在一个动态数组中,树形列表控件为TreeView。
  3. procedure TForm1.LoadTreeInfo;
  4. type
  5.   TInfo = record
  6.     ID,      //代码      
  7.     Name,    //名称
  8.     SuperID  //上级代码             
  9.       : string;
  10.     //附加字段随需添加
  11.   end;
  12. var
  13.   sql: string;
  14.   i, nCount: Integer;
  15.   arrInfo: array of TInfo;
  16.   NewNode: TTreeNode;
  17.   //加载一个节点
  18.   procedure InitOneNode(ANode: TTreeNode; AId: string);
  19.   var
  20.     k: Integer;
  21.   begin
  22.     for k := 0 to length(arrInfo) - 1 do
  23.       if arrInfo[k].SuperID = AId then
  24.       begin
  25.         NewNode := TreeView1.Items.AddChild(ANode, arrInfo[k].Name);
  26.         InitOneNode(NewNode, arrInfo[k].ID);
  27.       end;
  28.   end;
  29. begin
  30.   TreeView1.Items.BeginUpdate;
  31.   TreeView1.Items.Clear;
  32.   sql := 'select ID, Name, SuperID from DictionaryTable order by ID';
  33.   ADOQuery1.Close;
  34.   ADOQuery1.SQL.Text := sql;
  35.   ADOQuery1.Open;
  36.   nCount := ADOQuery1.RecordCount;
  37.   if nCount > 0 then
  38.   begin
  39.     SetLength(arrInfo, nCount);
  40.     for i := 0 to nCount - 1 do
  41.       with arrInfo[i] do
  42.       begin
  43.         ID := Trim(ADOQuery1.FieldByName('ID').AsString);
  44.         Name := Trim(ADOQuery1.FieldByName('Name').AsString);
  45.         SuperID := Trim(ADOQuery1.FieldByName('SuperID').AsString);  //无没有此字段,可根据上下级编码规则赋值
  46.         ADOQuery1.Next;
  47.       end;
  48.   end;
  49.   ADOQuery1.Close;
  50.   if nCount > 0 then
  51.   begin
  52.     InitOneNode(nil, '');  //假设顶级代码为空白
  53.     TreeView1.FullExpand;
  54.     TreeView1.Items.EndUpdate;
  55.   end;
  56. end;

你可能感兴趣的:(03,开发笔记)