Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - ttreeview neue Knoten hinzufügen
mrmiagi - Di 05.08.03 14:19
Titel: ttreeview neue Knoten hinzufügen
Servus, bin absoluter Newbie in Delphi, deswegen könnte meine Frage vielleicht etwas zu simpel für dieses Forum sein!?
Ich möchte eine hierarchische Datenstruktur darstellen.
Die Namen der Knoten sollen aus einer paradox7 Tabelle geholt werden.
In einem Query sage ich welche Felder selektiert werden sollen. Meine Frage lautet jetzt wie ich die selektierten Felder als Namen für meine Knoten bekomme?
Tino - Mi 06.08.03 09:44
Hallo!
In der Delphi-Hilfe befindet sich ein recht gutes Beispiel wie du Knoten einer TreeView hinzufügst.
Hier ist es (in abgewandelter Form):
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| var MyTreeNode: TTreeNode; begin with TreeView1.Items do begin Clear;
MyTreeNode := Add (nil, 'RootTreeNode1'); AddChild (MyTreeNode, 'ChildNode1');
AddChild (MyTreeNode, 'ChildNode2');
end; end; |
mrmiagi - Mi 06.08.03 11:31
Aber wie bekomme ich statt 'RootTreeNode1' das Ergebnis einer SQL-Query Abfrage als Name des Knoten??
CenBells - Mi 06.08.03 12:22
hallo,
dann schreibst du ins obere beispiel anstelle 'RootTreeNode1' query.fieldbyname('DeinFeldName').AsString
Gruß
Ken
mrmiagi - Do 07.08.03 09:05
Delphi-Quelltext
1:
| MyTreeNode := Add (nil, query2.fieldbyname('struktur').AsString); |
:cry: Gibt aber immer im Treeview einen leeren Root aus. Meine SQL-Abfrage funktioniert aber! :cry:
Tino - Do 07.08.03 10:49
mrmiagi hat folgendes geschrieben: |
Meine SQL-Abfrage funktioniert aber! :cry: |
Wie kommst du darauf?
Versuch als erstes mal einen Test-String anzugeben:
Delphi-Quelltext
1:
| MyTreeNode := Add (nil, 'Hauptknoten'); |
Wir der Knoten richtig angezeigt würde ich versuchen den Text aus der Datenbank anzugeben:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| Var Str: String; Begin Str := query2.fieldbyname('struktur').AsString; MyTreeNode := Add (nil, Str); End; |
Wenn es nicht klappen sollte dann setze einen Haltepunkt auf die letzte Zeile (MeyTreeNode := Add...) und überprüfe den Wert der Variable
Str.
Gruß
Tino
mrmiagi - Do 07.08.03 16:08
Hallo, hatte vergessen query.active auf true zu setzen. Jetzt habe ich ein neues Problem:
Ich möchte mehrere Roots aus meiner Abfrage einlesen. Ich verwende dazu ein Kennzeichen in meiner Datenbank das angiebt an weilcher Stelle in der Baumstruktur der Satz erscheinen soll. So möchte ich den Baum dynamisch füllen können. Wie mache ich das am besten?
CenBells - Do 07.08.03 17:21
hallo,
wenn die datensätze, die als kinder unter einem knoten angezeigt werden, direkt nach dem Vater in der tabelle kommen, ist es einfach.
ungefähr so in Pseudocode
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| var LVater, LKind: TTreenode; ... begin ... while not (LQuery.eof) do begin if query.fieldByName('identifier').asstring = 'Root' then LVater := Treeview.items.add(nil, query.fieldbyname('DeinFeldName').AsString) else LKind := Treeview.items.add(LNode, query.fieldbyname('DeinFeldName').AsString); LQuery.Next; end; |
Wenn die daten nicht so schön geordnet sind, musst du beim einfügen eines Kindknoten den gesamten baum durchsuchen und wenn der vater gefunden wurde, an ihn dran hängen.
Gruß
Ken
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!