Was ist der beste Weg, um Daten auf einem TreeView Knoten speichern?
-
23-08-2019 - |
Frage
Das TreeView ist eine schöne Möglichkeit, eine Hierarchie für die Nutzer zu präsentieren, aber stellen Sie sich das folgende Szenario mit der Hierarchie weiter unten dargestellt:
Building 1
-Tenant 1
- Payment 1
- Payment 2
Building 2
-Tenant 1
- Payment 1
-Tenant 2
- Payment 1
- Payment 2
, wo Sie brauchen einen Einsatz in einer Datenbank zu tun, wenn der Benutzer auf dem Zahlungsknoten klickt. Im Wesentlichen sind die Variablen für den Einsatz erforderlich BUILDING_ID, Tenant_Id, Payment_Id. Eine Möglichkeit, diese zu montieren ist an die Mutter jeden Knotens zu gehen:
Building_Id = Payment.ParentNode.ParentNode.Id
Ist es besser, alle Werte der ids auf dem Zahlungs Knoten in folgendem Format zu speichern, analysieren dann die Werte für BUILDING_ID, Tenant_Id, Payment_Id? Zum Beispiel:
Payment.Value = "1|2|1"
Lösung
Ich finde den besten Weg, um zusätzliche Daten zu handhaben ist TreeNode Unterklasse. Ich erstelle ein BaseNode Klasse, die die gemeinsam genutzten Daten, die ich pflegen wollen enthält, und erben weiter von der für alle spezifischen Knotentypen.
Der Wert von Subclassing ist, dass Sie starke Datentypen und komplexe Datentypen wie jede andere Klasse halten können ... was Hacking-Arrays in einen String mit Rohr Separatoren und dergleichen vermieden werden.
Sobald Sie Ihren Knoten an der richtigen Stelle erlaubt es den gleichen Baum zu Fuß Sie schlagen, außer jetzt die Werte aus ziehen (sagen wir) BaseNode.MyData (die alle Subtypen erben).
Eine Sache, auf die Sie achten, wenn Sie dies tun, aber: Sie müssen verstehen, wie maßgebende Sie diese Knoten wollen. In meinem Fall, wenn der Benutzer den Baum navigiert wir mit einem Datenbank-Cache überprüfen, um sicherzustellen, dass wir die Daten nicht neu auffüllen müssen.
Andere Tipps
Wenn die TreeNodes
der TreeView
Steuerung eine Tag
Eigenschaft haben, dass ein Objekt hält, können Sie ein benutzerdefiniertes Objekt verknüpfen diese gewünschten Eigenschaften mit jedem TreeNode
des Tags enthält, dann können Sie darauf zugreifen, falls erforderlich.
Zum Beispiel in .Net
als 4,5, würde es so aussehen:
myTreeNode.Tag = myObject;
Wo myTreeNode
ist eine Instanz von TreeNode
und myObject
ist eine Instanz des benutzerdefinierten Objekt, das Sie definiert, die die Daten enthält, wollen mit einem TreeNode
Ihrer TreeView
verbunden haben.
Hier ist ein Artikel auf MSDN auf der TreeNode.Tag Eigenschaft: MSDN -. TreeNode.Tag Property
Sie sollten erwägen Godeke Idee weiter zu nehmen und stattdessen die TreeNode von Subklassen, die Knoten zu einer Business-Objekt Sammlung binden - Ihre lokalen Daten in Eigenschaften der Sammlung Kinder zu speichern. Die Sammlung Logik in der Lage, Ihnen die benötigten Daten zu geben und Sie gewinnen die Vorteile die Daten und Logik von der Darstellungsschicht zu trennen.