Entwickler-Ecke
WinForms - TreeNodes hinzufügen
Cathi - Mo 06.10.14 10:06
Titel: TreeNodes hinzufügen
Guten Morgen,
Ich habe leider ein Problem damit meine Daten (siehe unten) in ein TreeView zu bekommen.
Ich bekomme die Daten jeweils als DataTable pro Level
Also 1 DT für Level 1 die nächste für lvl 2 usw.
Mein Problem ist jetzt, dass ich nicht weiß, wie ich sie immer an die richtige Stelle im TreeView schreiben kann.
Also dass die Childs jeweils dem richtigen Parent zugeordnet werden können
Ich würde mich sehr freuen, falls jemand einen Denkanstoß für mich hätte.
LG,
Cathi
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| DataID ParentID Daten1 Daten2 Level 1.1 1 808340 3025 1 1.2 1 808340 3025 1 1.3 1 808340 3025 1 1.1.1 1.1 961430 3011 2 1.2.1 1.2 961430 3012 2 1.2.2 1.2 961430 3012 2 1.2.3 1.2 961430 3012 2 1.3.1 1.3 961440 3011 2 1.3.2 1.3 961440 3011 2 1.2.2.1 1.2.2 961435 3003 3 1.2.3.1 1.2.3 962820 3003 3 1.2.3.2 1.2.3 962820 3003 3 1.2.3.3 1.2.3 962820 3003 3 1.2.3.4 1.2.3 962820 3003 3 1.2.3.5 1.2.3 962820 3003 3 1.2.3.6 1.2.3 962820 3003 3 1.2.3.7 1.2.3 962820 3003 3 1.3.2.1 1.3.2 962860 3000 3 1.3.2.2 1.3.2 962860 3000 3 1.3.2.3 1.3.2 962860 3000 3 |
Moderiert von
Th69: Code-Tags hinzugefügt
Th69 - Mo 06.10.14 11:29
Hallo Cathi :welcome:
das einfachste wird wohl sein, wenn du die Daten zuerst zu einer
DataTable vereinst (
DataTable.Merge [
http://msdn.microsoft.com/de-de/library/system.data.datatable.merge%28v=vs.110%29.aspx]) und dann entsprechend der 1. Spalte (DataId) sortierst, so daß sie dann (beispielhaft) in folgender Reihenfolge vorliegen:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| 1.1 1.1.1 1.2 1.2.1 1.2.1.1 1.2.2 1.2.2.1 1.2.3 1.2.3.1 1.3 1.3.1 1.3.2 |
Nun kannst du einfach von oben nach unten den Baum aufbauen. Du mußt dir dann nur je Level den Parent-TreeNode merken (z.B. in einer
List<TreeNode>).
Wenn der Level größer als der vorherige Level ist, dann einen Untereintrag erzeugen, ansonsten bei gleichem Level einen neuen Nachbarknoten erzeugen.
Nur wenn der Level kleiner als der aktuelle ist, mußt du die Parent-Liste durchsuchen und den passenden
TreeNode finden, an dem der neue Knoten eingefügt werden soll.
Die Parent-Liste mußt du nach jeder Aktion dann aktualisieren.
Wenn du viel Zeit zum Lesen hast, kann ich dir auch noch folgenden Artikel (aus dem myCSharp-Forum) empfehlen:
[Tutorial] Bäume durchlaufen mit Rekursion (und Alternativen) [
http://www.mycsharp.de/wbb2/thread.php?threadid=62187]
Ralf Jansen - Mo 06.10.14 11:36
Ich bezweifle (besser ich hoffe nicht) das die Keys (ParentID, DataID) den kompletten Pfad der Knoten enthält so das die sortierbar wären. Das wäre eine mittelprächtige Katastrophe (Update Kaskade) wenn man mal in der root einen Wert ändert oder einfügt und man alle Childs nachziehen müßte.
Was steht wirklich in DataID und ParentID?
Cathi - Mo 06.10.14 11:46
Hallo Th69, hallo Ralf Jansen
erst mal vielen, vielen Dank für eure Antworten.
@ Th69: ich werde eine Weile brauchen um deinen Vorschlag tatsächlich umzusetzen :)
Das geht mir noch nicht so leicht von der Hand.
Wenn ich es geschafft habe, kommt ein Status-Update. :)
@ Ralf: Ich erzeuge die ParentID und DataID direkt im Schritt davor selbst.
Also werden die bei jeder Abfrage einfach neu erzeugt. Ich glaube da macht das nichts oder?
Grüße,
Cathi
Ralf Jansen - Mo 06.10.14 12:12
| Zitat: |
@ Ralf: Ich erzeuge die ParentID und DataID direkt im Schritt davor selbst.
Also werden die bei jeder Abfrage einfach neu erzeugt. Ich glaube da macht das nichts oder? |
Stimmt. Klingt dann aber eher merkwürdig das du getrennte DataTables erzeugst wenn man für die darin enthalten Keys aber die Daten aus den anderen DataTables braucht (bzw. die gleichen Daten nochmal aus der eigentlichen Quelle).
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!