La vista de árbol del programa C# Winform utiliza enlace de datos recursivo para construir un modelo de nodo de tres niveles. ¿Cómo guardar el valor del nodo seleccionado al agregar?
Si se refiere a este problema, entonces el problema se reduce a: cómo guardar y restaurar condicionalmente el estado seleccionado. de nodos del árbol.
Sabemos que cada nodo del árbol tiene una ruta (atributo FullPath), y la ruta puede representar la estructura completa del árbol. El formato predeterminado para las rutas es nodetext\nodetext\................................. ........... ................................................. .... ................................................. ................... ....................
Está bien, vamos Escriba una pequeña clase auxiliar para ayudar a guardar y restaurar el estado seleccionado de los nodos del árbol.
¿Público? ¿clase? TreeStatusLoader
{
¿TreeView? TV;
Diccionario<string,? bool>? árbolEstadoDic? =?¿Nuevo? diccionario<string,? bool & gt();
¿Público? TreeStatusLoader(TreeView?TV)
{
¿Este.TV? =?TV;
}
¿Público? ¿Vacío? SaveTreeStatus()
{
treeStatusDic. clear();
SaveTreeStatus(tv.node);
}
¿Privado? ¿Vacío? SaveTreeStatus(colección de nodos de árbol? nodo)
{
foreach? (TreeNode?tn?at?node)
{
¿Si? (!treeStatusDic. contiene clave (tn. ruta completa))
treeStatusDic. Add(tn. Ruta completa,? tn. Comprobado);
SaveTreeStatus(tn. Nodo
}
}
; ¿Público? ¿Vacío? LoadTreeStatus()
{
LoadTreeStatus(tv.node);
}
¿Privado? ¿Vacío? LoadTreeStatus(colección de nodos de árbol? nodo)
{
foreach? (TreeNode?tn?at?node)
{
¿Si? (treeStatusDic. Contiene clave (tn. Ruta completa))
tn. ¿Comprobado? =?treeStatusDic[tn. ruta completa];
LoadTreeStatus(tn. node);
}
}
}Esta clase en realidad atraviesa todos los nodos, y guarde su ruta completa y las propiedades marcadas para su recuperación. Usé un poco de recursividad.
Lo último que quiero señalar es que FullPath usa el valor de texto del nodo, que yo uso como clave del diccionario. Si hay un nodo con el mismo texto en un determinado nivel del árbol, proporcione usted mismo una clave única adecuada (por ejemplo, reemplace cada texto de la ruta completa con Nombre o asigne al nodo una etiqueta única).
Fácil de usar,
TreeStatusLoader tsl = new TreeStatusLoader(treeview 1); SaveTreeStatus();
tsl. LoadTreeStatus();