Einzelnen Beitrag anzeigen

Igotcha

Registriert seit: 22. Dez 2003
544 Beiträge
 
Delphi 2006 Professional
 
#8

Re: .... nochmals VirtualStringTree

  Alt 8. Okt 2004, 09:32
EDIT: Ich habe meine Beispielstruktur editiert, da sie murks war Du musst nur darauf achten, dass Du Dir irgendwie eine eindeutige PARENTID bastelst (evtl. Nimmst Du noch das Jahr mit rein beim Monat) - mein Beispiel ist nicht eindeutig, da es MONAT=11 und KW=11 geben kann, also für die Spalte ZEITRAUM. Besser, Du schreibst beim Monat noch das Jahr dazu.

Du wirst dabei aber auf ein grundsätzliches "Problem" bei der Arbeit mit VTs stossen, denn man kann Nodes dort nicht direkt anspringen. Sprich sowas wie "hänge den Child an den Node 123" gibt es von Hause aus nicht.

Da kannst Du Dir eine Funktion zu schreiben:

Delphi-Quellcode:
function TfrmMain.FindNodeByPERIODE(aTree: TBaseVirtualTree;
  aID: String;): PVirtualNode;
var
   NodeData: pVSTData;
begin
   Result := aTree.GetFirst;
   while Assigned(Result) do
   begin
     NodeData := pVSTData(aTree.GetNodeData(Result));
     if NodeData^.strPeriode=aID Then
       Exit;
     Result := aTree.GetNext(Result);
   end;
end;
Wenn Du also in Deiner Schleife auf einen Eintrag stößt, wo PARENTID <> 0 ist, dann rufst Du auf:

Code:
 
var
aktueller_knoten: PVirtualNode;
myData: PVSTData;
begin
<--- SCHLEIFENAUSZUG
<--- dieses Konstrukt musst Du in der Schleife für Childs verwenden
aktueller_knoten:=DEINVST.AddChild( FindNodebyPERIODE(DEINVST, PARENTID));
myData:=DEINVST.GetNodeData(aktueller_knoten);
myData.strPeriode:=inttostr(42); //KALENDERWOCHE
myData.strProjektname:='Test';
etc.
end;
Und das Child wird an den richtigen Root angehängt.

Beim Arbeiten mit VSTs muss man sich erstmal bewußt werden, dass dieser wirklich nichts anderes macht, als spitzenmäßige Visualisierungsmöglichkeiten für Treeview-artige Strukturen zu ermöglichen - die Datenhaltung musst Du selbst machen.

Gruß Igotcha
  Mit Zitat antworten Zitat