Laden...

TreeView dynamisch erweitern

Erstellt von Echo]6[ vor 15 Jahren Letzter Beitrag vor 15 Jahren 2.365 Views
E
Echo]6[ Themenstarter:in
111 Beiträge seit 2006
vor 15 Jahren
TreeView dynamisch erweitern

verwendetes Datenbanksystem: SQL Server 2005

Hallo!

Ich arbeite gerade mit dem TreeView und möchte nicht direkt am Anfang alle Datensätze laden, sondern erst beim jeweiligen markieren eines Knotens. Am Anfang lade ich alle Hauptknoten in eine DataTable und binde Sie an das TreeView.

Das ermitteln und nachladen der Unterpunkte mache ich im "AfterSelect" - Ereignis. Dazu habe ich die TreeView-DataTable mit einer anderen DataTable (die die Unterpunkte enthält), per Merge-Befehl zusammengeführt.

Wie kann man es aber nun realisieren, dass beim erneuten Klick auf den Knoten, nicht wieder die gleichen Unterknoten nochmal hinzugefügt werden, sondern nur die neu in der Datenbank hinzugekommen sind, z.B. durch einen anderen Benutzer?

Gruß
Echo

h
17 Beiträge seit 2007
vor 15 Jahren

Moinsen Echo]6[,

Es gibt bei dem TreeNode-Control ein Property, mit dem Namen Tag. Es ist vom Typ object, also kannst du da reinpacken, was du gern möchtest. Ich würde eine ID einführen, nach der du deine Datenbank eingelesen hast, kannst du ja die IDs deiner Datensätze mit denen deiner TreeNodes vergleichen. Abweichende hinzufügen oder wieder löschen.
Ich weiß nicht wie stark die Fluktuation innerhalb deiner DB ist. sonst kannst du auch einfach einen TreeNode.Controls.Clear() ausführen, und deine Daten einfach neu einladen. So mach ich das, damit ich immer die aktuellsten Daten im TreeView habe. Sollte man sich aber bei größeren Datenmengen ehr verkneifen.

Ich hoffe, ich konnte dir helfen.

Bis die Tage, Stefan.

Die größten Fehler sind immer die Fehler der Anderen.

3.822 Beiträge seit 2006
vor 15 Jahren

Ich gehe beim Anzeigen eines Treeviews wie folgt vor :

  • Alle Knoten der obersten Ebene anlegen
  • Prüfen ob Unterknoten vorhanden sind, wenn ja ein Dummy-Unterknoten anlegen

Beim Klick auf ein Knoten :

  • Prüfen ob Dummy-Unterknoten vorhanden. Wenn ja dann Unterknoten zu Knoten laden, Dummy-Knoten natürlich entfernen.

Geht supereinfach und schnell, man muss noch nicht einmal verstehen was Rekursion ist.

Sollte man aber wissen wenn man programmiert 😉

Der Dummy-Unterknoten muss angelegt werden damit ein [+] angezeigt wird.

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

E
Echo]6[ Themenstarter:in
111 Beiträge seit 2006
vor 15 Jahren

@BerndFfm

Ich lasse mir ja am Anfang mittels des DataAdapters alle Datensätze in eine DataTable laden, die zur ersten Ebene gehören. Gehst du dann diese Datensätze durch und überprüfst nochmal per SQL-Statement, ob diese Schicht noch Unterknoten besitzt oder wie machst du das?

Wie realisierst du denn das ermitteln der Unterknoten? Ich lasse mir momentan eine weitere DataTable mit Punkten der nächsten Ebene erstellen und versuche sie dann mit der "Haupt"-DataTable zusammenzufügen. Wobei das momentan nicht richtig klappt.

Gruß
Echo

3.822 Beiträge seit 2006
vor 15 Jahren

Ja, entweder pro Knoten die Anzahl der Unterknoten ermitteln oder gleich im ersten SQL-Statement z.B. per Join.

Ich lasse mir momentan eine weitere DataTable mit Punkten der nächsten Ebene erstellen

Das geht meistens nicht weil man nich weiss welche Knoten in der nächsten Ebene vorkommen.

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

E
Echo]6[ Themenstarter:in
111 Beiträge seit 2006
vor 15 Jahren

Hi!

So, ich habe es jetzt gelöst. Ich schreibe jetzt gar nichts mehr in einer DataTable, sondern sobald man auf einen Knoten klickt, ermittel ich die Unterpunkte und gehe diese mit einem SqlDataReader durch. Während diesem Durchlauf erstelle ich dann meine Knoten und fertig!

Gruß
Echo

P.S. Danke nochmal für eure Hilfe! 🙂