Was ich damit meine, ist folgendes:
Code: Alles auswählen
var
F1: TField;
F2: TField;
begin
F1 := Dataset.FieldByName('Field1');
F2 := Dataset.FieldByName('Field2');
Dataset.First;
while not Dataset.EoF do begin
TreeView.Items.AddObject(nil, F1.AsString + ' / ' + F2.AsString);
// Nicht: TreeView.Items.AddObject(nil, Dataset.FieldByName('Field1').AsString + ' / ' +
// Dataset.FieldByName('Field2').AsString);
Dataset.Next;
end;
end;
Achja, und das wichtigste noch: Bei einer großen Tabelle solltest du natürlich nicht alle Datensätzeauf einmal einlesen, sondern zunächst nur die im Tree ganz oben. Dann könntest du einen Hintergrund-Thread starten, der für jeden der eingelesenen Nodes feststellt, ob Kinder vorhanden sind. Erst wenn ein Node expandiert wird (Ereignis OnExpand), werden die von dem expandierten Node abhängigen Datensätze eingelesen, usw.
Die Funktionen von CNPack und GExperts sind so ähnlich bereits in Lazarus integriert. Siehe z.B. http://wiki.freepascal.org/Lazarus_IDE_Tools/de