A nuestro usuario no le gustó y nos pidió que utilizáramos un menú parecido al explorador de Windows, TreeView. El cambio realmente fue fácil, solo se cambio un poco el código y ya teníamos el menú de Árbol, parecía que todo estaba resuelto con eso. Así se veía
El cliente estaba satisfecho con ese menú, pero había un problema, cada vez que entraban a una WebForm seleccionada desde el menú, este se contraía y quedaba así
Realmente nunca nos hizo algún comentario el cliente acerca de este comportamiento, el comentario acerca de esta situación fu por parte de personal de la misma empresa.
Decidimos buscar alguna solución pero no encontrábamos nada en la red, por lo que lo mas fácil fue decir que no se podía, y ahí quedó todo. A mi, esa respuesta no me convenció, todos los que nos dedicamos a esto sabemos que tenemos las herramientas para hacer casi todo, nosotros trabajamos con Visual Studio, y Microsoft nos da la facilidad para hacer lo que se nos ocurra.
Lo primero que se me ocurrió fue poner el menú en un UpdatePanel, pero no funcionó, pasaba exactamente lo mismo, el menú se contraía, luego pensé en dividir en paneles la Masterpage para que así solo moviera el panel central, donde se ubican las paginas, pues nada, seguía sin funcionar.
Entonces decidí ver el funcionamiento del TreeView, y como es que respondía al click para mandar a llamar la WebForm.
Opté por obtener el nombre de la pantalla para poder localizarla en el menú, lo hice así:
public string NombrePagina()
{
string direccion = System.Web.HttpContext.Current.Request.Url.AbsolutePath;
System.IO.FileInfo info = new System.IO.FileInfo(direccion);
string valor = info.Name;
return valor;
}
Con esto ya obtenía el nombre de la WebForm
Al tener ya el nombre de la WebForm lo demás fue un poco de sentido común, tenía que recuperar el título con el que aparecía en el menú, y ya obteniéndolo solo quedaba ubicarlo en el menú y expandir el TreeView, el código fue el siguiente:
private void expandirMenu(object sender, string nombre)
{
TreeView1.CollapseAll();
var tree = (TreeView)sender;
int i = 0, rea = 0, apl = 0;
foreach (TreeNode node in tree.Nodes)
{
int nodo = TreeView1.Nodes.Count - 1;
i = node.ChildNodes.Count - 1;
node.DataPath.ToString();
for (int aplicaciones = 0; aplicaciones <= i; )
{
rea =
node.ChildNodes[aplicaciones].ChildNodes.Count - 1;
for (int modulos = 0; modulos <= rea; )
{
apl =
node.ChildNodes[aplicaciones].ChildNodes[modulos].ChildNodes.Count - 1;
for (int submodulos = 0; submodulos
<= apl; )
{
if (nombre.Trim() ==
node.ChildNodes[aplicaciones].ChildNodes
[modulos].ChildNodes[submodulos].Value.ToString().Trim())
{
node.Expanded = true;
node.ChildNodes[aplicaciones].Expanded = true;
node.ChildNodes[aplicaciones].ChildNodes[modulos].Expanded = true;
node.ChildNodes[aplicaciones].ChildNodes[modulos].ChildNodes
[submodulos].ImageUrl
= "~//Pictures//RArrow.gif";
}
submodulos++;
}
modulos++;
}
aplicaciones++;
}
}
}
"sender": Es el nombre de nuestro TreeView, en mi caso: TreeView1.
"nombre": Es el nombre que se muestra en el menú y que nosotros recuperamos de la base de datos.
Y el resultado fue el siguiente:
Ya mantenía el menú extendido. Es la manera en que yo solucione esto, quizá exista alguna otra manera o mas fácil o "correcta", pero como un amigo dice, "La manera correcta es como lo haces, siempre y cuando no afecte el rendimiento".
Saludos
Dejo a su disposición mi correo: ricegamo@hotmail.com.




No hay comentarios:
Publicar un comentario