hi,
erstelle mal ein objekt der folgenden struktur
Delphi-Quellcode:
TDeinRecord = class
private
...
public
property ID: Integer...;
property ParentID: Integer ...;
property FolderName: String;
end;
Dann machst du ein
query, mit der folgenden abfrage
Code:
SELECT *
FROM DeineTabelle
WHERE PArentID = 0
ORDER BY ID
damit fängst du auf jeden fall mit den knoten an, die keinen vater haben
Das Ganze verbastelst du in einer prozedur...
Delphi-Quellcode:
procedure genBaum(AParentID: Integer = 0; AParentNode: PVirtualNode =
nil);
// brauchst beim ersten aufruf keine parenid übergeben
var
LNode: PVirtualNode;
LRec: TDeinRecord;
LData: Pointer;
...
begin
...
// hole query s.o.
while not DeinQuery.Eof
do begin
LRec := TDeinRecord.create;
LRec.Id := DeinQuery.FieldByName('
Id').AsInteger;
LRec.ParentID := DeinQuery.FieldByName('
ParentId').AsInteger;
LRec.FolderName := DeinQuery.FieldByName('
Foldername').AsString;
LNode := DeinBaum.AddChild(AParentNode);
LData := DeinBaum.getNodeData(LNode);
TObject(LData^) := LRec;
// und jetzt noch rekursiv aufrufen
genBaum(DeinQuery.FieldByName('
Id').AsInteger, LNOde);
DeinQuery.Next;
end;
end;
ein beispielaufruf ist dann
genBaum();
Gruß
Ken