Autor Beitrag
Cathi
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Mo 06.10.14 10:06 
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

ausblenden 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 user profile iconTh69: Code-Tags hinzugefügt
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4800
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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) und dann entsprechend der 1. Spalte (DataId) sortierst, so daß sie dann (beispielhaft) in folgender Reihenfolge vorliegen:
ausblenden 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)
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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).