Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

Процедура заполнения компонента TTreeView данными из TDataSet-совместимой выборки

01.01.2007
{ **** UBPFD *********** by delphibase.endimus.com ****
>> Процедура заполнения компонента TTreeView данными из TDataSet-совместимой выборки
 
Процедура заполнения компонента TTreeView данными из TDataSet-совместимой
выборки типа: idNode int, idParentNode int, cNodeName varchar, ...
 
Важно: корневой узел дерева должен быть первой записью выборки.
 
Зависимости: Windows, SysUtils, DB, ComCtrls
Автор:       Delirium, Master_BRAIN@beep.ru, ICQ:118395746, Москва
Copyright:   Master BRAIN (Delirium)
Дата:        18 октября 2002 г.
***************************************************** }
 
procedure
FillTree(Tree: TTreeView; Query: TDataSet; idNode, idParent,
  cNodeName
: string);
var
  i
: integer;
begin
 
// Корневой узел, должен быть первым в выборке Query
 
Query.First;
 
Tree.Items.Clear;
 
Tree.Items.AddObject(nil, Query.FieldByName(cNodeName).AsString,
   
Pointer(Query.FieldByName(idNode).asInteger));
 
Query.Next;
 
while not Query.Eof do
 
begin
    i
:= 0;
   
while i < Tree.Items.Count do
     
if Tree.Items.Item[i].Data = Pointer(Query.FieldByName(idParent).asInteger)
       
then
     
begin
       
Tree.Items.AddChildObject(Tree.Items.Item[i],
         
Query.FieldByName(cNodeName).AsString,
         
Pointer(Query.FieldByName(idNode).asInteger));
       
break;
     
end
     
else
       
Inc(i);
   
Query.Next;
 
end;
end;

Пример использования:

FillTree(TreeView1, ADOQuery1, 'idDoc', 'idParentDoc', 'cDocument');