![]() |
VirtualTreeView, einen Node nach Record-Feldinhalt suchen
Hallo Zusammen,
ich habe einen TreeData Record mit folgender Struktur: TTreeData = record FCaption: String; FBold: Boolean; FFahrzeugID: integer; FFarbe:Integer; end; Jedes Node hat die gleiche Struktur und die FFahrzeugID ist eindeutig. Wie kann ich das Node mit einer bestimmten FFahrzeugID suchen um in das Feld FFarbe den wert zu setzen? Gruß Kostas |
Re: VirtualTreeView, einen Node nach Record-Feldinhalt suche
hallo,
dafür machst du eine schleife. Hat dein baum mehrere Ebenen, dann musst du den aufruf eventuell rekursiv machen. Hier ein kleiner anfangshinweis
Delphi-Quellcode:
Gruß
...
LNode := deintree.getfirst; while assigneD(LNode) do begin // mach was mit den daten des baumes LNode := LNode.nextSibling; end; Ken |
Re: VirtualTreeView, einen Node nach Record-Feldinhalt suche
brauchst nicht rekursiv machen !
wennst folgendermassen vorgehst :
Delphi-Quellcode:
Gruss
LNode := deintree.getfirst;
while assigneD(LNode) do begin // mach was mit den daten des baumes // ... deiintree.GetNodeData(LNode); LNode := LNode.next; end; Hans |
Re: VirtualTreeView, einen Node nach Record-Feldinhalt suche
Danke für die schnelle Antwort.
Ich hätte erwartet das eine Methode gibt einen Node zu finden anhand der Daten. In meinem Fall ist es wirklich nicht schlimm weil ich nur wenig Einträge im TreeView gibt. Aber was währe wenn ich im TreeView mehrere Tausend Nodes währen! Gruß Kostas |
Re: VirtualTreeView, einen Node nach Record-Feldinhalt suche
bei Bedarf kannst dir ja den Node in den Record dazuspeichern, dann brauchst gar nicht zu suchen !
|
Re: VirtualTreeView, einen Node nach Record-Feldinhalt suche
Zitat:
Ich habe mir in meinen Knotendaten zu jedem Node den Parent vermerkt (der eine ID hat). Ich benutze die Funktion, um an den Root-Knoten später die Kinder ranzuhängen. Mußt Du natürlich noch an Deine Bedürfnisse anpassen.
Delphi-Quellcode:
Aufgerufen wird das später dann bei mir so:
function TfrmMain.FindNodeByData(aTree: TBaseVirtualTree;
aID: Integer): PVirtualNode; var NodeData: pIstData; begin Result := aTree.GetFirst; while Assigned(Result) do begin NodeData := pIstData(aTree.GetNodeData(Result)); if (NodeData^.FGid = aID) AND ((NodeData^.FGTyp=0) OR (NodeData^.FGTyp=1)) Then Exit; Result := aTree.GetNext(Result); end; end;
Delphi-Quellcode:
position:=atree.AddChild(FindNodebyData(atree, myData.FGid));
myPosData:=atree.GetNodeData(position); usw. |
Re: VirtualTreeView, einen Node nach Record-Feldinhalt suche
Zitat:
Zitat:
Also irgendwie sieht der code vom prinzip her genauso aus, wie der von mir. ;) Gruß Ken |
Re: VirtualTreeView, einen Node nach Record-Feldinhalt suche
Delphi-Quellcode:
aID ist der übergebene Parameter und die ID des Parents.
if (NodeData^.FGid = aID) AND ((NodeData^.FGTyp=0) OR (NodeData^.FGTyp=1)) Then
Dazu muß ich evtl. noch folgendes sagen: Ich lese aus der Datenbank alle Knoten auf einmal ein ein (Roots und Childs), also nicht erst Hauptknoten und dann evtl. auf Klick die entsprechenden Unterknoten. Wobei alle Knoten in der DB eine ID haben (wenn Unterknoten, dann steht ID des Parents drin, ansonsten "0". ID ist ein von mir vorgegebener Bezeichner -> Kostengruppennummer), ob sie Haupt-oder Unterknoten sind. Beim Select sortiere ich danach und vermeide so, dass evtl. Unterknoten angehängt werden sollen, zu denen es noch keinen Hauptknoten gibt. Meine Aufbauroutine sieht dementsprechend so aus: 1. Hauptknoten? -> Hinzufügen 2. Unterknoten? -> Zu Hauptknoten mit entsprechender ID hinzufügen Bei 2. benutze ich dann die o.g. Funktion, um im VTV den entsprechenden Haupt-Knoten zu finden. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz