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"
War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top