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

  1. //采用递归方法,D7编译调试通过。
  2. //数据采用ADOQuery读取,并将数据暂存在一个动态数组中,树形列表控件为TreeView。

  3. procedureTForm1.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:arrayofTInfo;
  16. NewNode:TTreeNode;

  17. //加载一个节点
  18. procedureInitOneNode(ANode:TTreeNode;AId:string);
  19. var
  20. k:Integer;
  21. begin
  22. fork:=0tolength(arrInfo)-1do
  23. ifarrInfo[k].SuperID=AIdthen
  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:='selectID,Name,SuperIDfromDictionaryTableorderbyID';
  33. ADOQuery1.Close;
  34. ADOQuery1.SQL.Text:=sql;
  35. ADOQuery1.Open;
  36. nCount:=ADOQuery1.RecordCount;
  37. ifnCount>0then
  38. begin
  39. SetLength(arrInfo,nCount);
  40. fori:=0tonCount-1do
  41. witharrInfo[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. ifnCount>0then
  51. begin
  52. InitOneNode(nil,'');//假设顶级代码为空白
  53. TreeView1.FullExpand;
  54. TreeView1.Items.EndUpdate;
  55. end;
  56. end;

你可能感兴趣的:(递归)