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
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.
Ich gehe beim Anzeigen eines Treeviews wie folgt vor :
Beim Klick auf ein Knoten :
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
@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
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
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! 🙂