¿Cuál es la mejor manera de almacenar los datos en un nodo de TreeView?
-
23-08-2019 - |
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"
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.