数据库表结构是:
id   parentID   name
1    0          水果
2    1          国内水果
3    1          进口水果
4    2          香蕉
5    2          苹果
我是这样加载节点的,但这样会加载所有节点,假如我只要加载国内水果呢?总不能写死了select * from sg where parentID<>2,怎么办?最好在下面基础上改ADOQuery1.SQL.Add('select * from sg');
MakeTree(ADOQuery1, TreeView1);
procedure TFormKcsp.MakeTree(Query: TADOQuery; TreeView1: TTreeView);
var
  List: TStringList;
  Node: TTreeNode;
  Index: Integer;
begin
  TreeView1.Items.BeginUpdate;
  try
    TreeView1.Items.Clear;
    List := TStringList.Create;
    try
      List.Sorted := True;
      while not Query.Eof do
      begin
        if Query.FieldByName('ParentID').AsInteger = 0 then { ParentID=0,顶层节点 }
        begin
          Node := TreeView1.Items.AddChild(nil, Query.FieldByName('name').AsString);
        end
        else
        begin
          Index := List.IndexOf(Query.FieldByName('ParentID').AsString);
          Node := TreeView1.Items.AddChild(TTreeNode(List.Objects[Index]),Query.FieldByName('name').AsString);
        end;
        List.AddObject(Query.FieldByName('ID').AsString, Node);
        Node.Data:=strnew(PChar(Query.FieldByName('ID').AsString));
        Query.Next;
      end;
    finally
      List.Free;
    end;
  finally
    TreeView1.Items.EndUpdate;
  end;
end;