Pregunta

El TreeView es una buena manera de presentar una jerarquía de usuarios, pero imaginar el siguiente escenario con la jerarquía se representa a continuación:

Building 1 
 -Tenant 1
   - Payment 1
   - Payment 2
Building 2
 -Tenant 1
   - Payment 1
 -Tenant 2
   - Payment 1
   - Payment 2

donde se necesita hacer una inserción a una base de datos cuando el usuario hace clic en el nodo de Pago. Esencialmente las variables requeridas para la inserción son BUILDING_ID, Tenant_Id, Payment_Id. Una manera de montar éstos es caminar a los padres de cada nodo:

Building_Id = Payment.ParentNode.ParentNode.Id

¿Es mejor almacenar todos los valores de los identificadores en el nodo de Pago en el siguiente formato, a continuación, analizar los valores de BUILDING_ID, Tenant_Id, Payment_Id? Por ejemplo:

Payment.Value = "1|2|1"
¿Fue útil?

Solución

Me parece la mejor manera de manejar datos adicionales es una subclase TreeNode. Creo una clase BaseNode que contiene los datos compartidos quiero mantener, y heredar más lejos de que para cualesquiera tipos de nodos específicos.

El valor de las subclases es que se puede mantener los tipos de datos fuertes y tipos de datos complejos como cualquier otra clase ... que evita matrices de piratería informática en una cadena con separadores de tubos y similares.

Una vez que tenga sus nodos en el lugar que permite el mismo recorrido del árbol que usted propone, excepto que ahora usted está tirando de los valores a partir de (digamos) BaseNode.MyData (que todos sus subtipos heredarán).

Una cosa que debe vigilar si hace esto sin embargo: es necesario entender cómo autorizada desea que estos nodos sean. En mi caso, cuando el usuario navega por el árbol, comprobamos con un caché de base de datos para asegurarse de que no necesitamos para repoblar los datos.

Otros consejos

Si el TreeNodes del control TreeView tiene una propiedad Tag que sostiene un objeto, se puede asociar un objeto personalizado que contiene las propiedades deseadas con la etiqueta de cada TreeNode, entonces se puede acceder a ellas cuando sea necesario.

Por ejemplo, en .Net como de 4,5, sería de esta manera:

myTreeNode.Tag = myObject;

Cuando myTreeNode es una instancia de TreeNode y myObject es una instancia del objeto personalizado que ha definido que contiene los datos que desea asociar con un TreeNode de su TreeView.

Aquí está un artículo en MSDN en la propiedad TreeNode.Tag: MSDN -. TreeNode.Tag propiedad

Es posible considerar la adopción de la idea de Godeke más allá y en lugar de la subclasificación del TreeNode, atar los nudos de una colección de objetos de negocio - el almacenamiento de sus datos locales de las propiedades de los hijos de recogida. La lógica colección será capaz de darle los datos que necesita y obtener los beneficios de separar los datos y la lógica de la capa de presentación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top