表结构如下:
CREATE TABLE Table1 (
  ID INTEGER NOT NULL,
  ParentID INTEGER NOT NULL,
  Caption VARCHAR(100),
  ImageIndex INTEGER,
);我的填充算法如下:
procedure FillChildNodes(ATable:TABSDataSet; ATreeView:TTreeView; AParentNode:TTreeNode);
var
  Node: TTreeNode;
begin
  Node := nil;  ATable.First;
  while not ATable.Eof do
  begin
    Node:=ATreeView.Items.AddChild(AParentNode,ATable.FieldByName('Caption').AsString);
    Node.Data:=Pointer(ATable.FieldByName('ID').AsInteger);
    Node.ImageIndex := ATable.FieldByName('ImageIndex').AsInteger;
    ATable.Next;
  end;  while Node <> nil do
  begin
    ATable.Filtered := False;
    ATable.Filter := 'ParentID = ' + IntToStr(Integer(Node.Data));
    ATable.Filtered := True;
    if not ATable.IsEmpty then
      FillChildNodes(ATable, ATreeView, Node);
    Node := Node.getPrevSibling;
  end;
end;
//------------------------------------------
Table1.TableName := 'Table1';
Table1.Open;
Table1.Filtered := False;
Table1.Filter := 'ParentID = 0';//ParentID=0表示第一级节点
Table1.Filtered := True;
myTree.Items.BeginUpdate;  //myTree要填充的TreeView控件
try
  FillChildNodes(Table1, myTree, nil);
finally
  myTree.Items.EndUpdate;
end;