none
Recorrer los nodos de un treeview RRS feed

  • Pregunta

  • Buenos días. Tengo que llenar un treeview con una serie de datos obtenidos de un Base de Datos así:

    07.09.20.00
    07.09.20.10
    07.09.20.10
    07.09.20.10
    07.09.20.90
    07.09.20.90

    La idea es que los nodos principales del árbol se creen con los 11 primeros dígitos, y si el siguiente dato es igual se crea como un hijo, es decir debería quedar algo así:

    07.09.20.00

    07.09.20.10

              07.09.20.10

              07.09.20.10

    07.09.20.90

              07.09.20.90

    Como se puede lograr esto. Muchas gracias

    martes, 10 de octubre de 2017 12:24

Respuestas

  • Buenas,

    Aplicando un poco de LinQ al treeview, puedes conseguir saber si ya existe, y si existe obtenerlo y añadirle los nuevos, prueba este codigo:

     //Simulo la generacion de datos por parte de la db
    List<string> lecturaDB = new List<string>();
    lecturaDB.Add("07.09.20.00");
    lecturaDB.Add("07.09.20.10"); 
    lecturaDB.Add("07.09.20.10");
    lecturaDB.Add("07.09.20.10");
    lecturaDB.Add("07.09.20.90");
    lecturaDB.Add("07.09.20.90");
    
    //limpio el treeview
    treeView1.Nodes.Clear();
    
    //Por cada dato de la db, hago la comprobacion
    foreach (string item  in lecturaDB)
    {
        TreeNode nodoNuevo = new TreeNode(item);
        //Filtramos con LinQ para buscar si existe el nodo
        var nodo = (from TreeNode t in treeView1.Nodes
                                where t.Text == nodoNuevo.Text
                                select t).FirstOrDefault();
        //Si no existe, lo añadimos al treeView
        if(nodo == null)
        {
            treeView1.Nodes.Add(nodoNuevo);
        }
        else //si existe, lo añadimos al nodo que ya existe
        {
            nodo.Nodes.Add(nodoNuevo);
        }              
    }

    Eso genera este resultado:

    Yo estoy utilizando una lista de strings, tu tendras que adaptarlo para tus datos.

    Atte


    No olvides votar mi comentario si te ha ayudado y marcarlo como respuesta si ha sido la solución, con eso ayudas a mejorar mi reputación en la comunidad y a identificar la respuesta a la gente que tenga el mismo problema.

    Para obtener una respuesta lo más rápida y concisa posible, te recomiendo:

    • Propuesto como respuesta osrol martes, 10 de octubre de 2017 14:10
    • Marcado como respuesta nelson111 martes, 10 de octubre de 2017 17:16
    martes, 10 de octubre de 2017 13:01

Todas las respuestas

  • Buenas,

    Aplicando un poco de LinQ al treeview, puedes conseguir saber si ya existe, y si existe obtenerlo y añadirle los nuevos, prueba este codigo:

     //Simulo la generacion de datos por parte de la db
    List<string> lecturaDB = new List<string>();
    lecturaDB.Add("07.09.20.00");
    lecturaDB.Add("07.09.20.10"); 
    lecturaDB.Add("07.09.20.10");
    lecturaDB.Add("07.09.20.10");
    lecturaDB.Add("07.09.20.90");
    lecturaDB.Add("07.09.20.90");
    
    //limpio el treeview
    treeView1.Nodes.Clear();
    
    //Por cada dato de la db, hago la comprobacion
    foreach (string item  in lecturaDB)
    {
        TreeNode nodoNuevo = new TreeNode(item);
        //Filtramos con LinQ para buscar si existe el nodo
        var nodo = (from TreeNode t in treeView1.Nodes
                                where t.Text == nodoNuevo.Text
                                select t).FirstOrDefault();
        //Si no existe, lo añadimos al treeView
        if(nodo == null)
        {
            treeView1.Nodes.Add(nodoNuevo);
        }
        else //si existe, lo añadimos al nodo que ya existe
        {
            nodo.Nodes.Add(nodoNuevo);
        }              
    }

    Eso genera este resultado:

    Yo estoy utilizando una lista de strings, tu tendras que adaptarlo para tus datos.

    Atte


    No olvides votar mi comentario si te ha ayudado y marcarlo como respuesta si ha sido la solución, con eso ayudas a mejorar mi reputación en la comunidad y a identificar la respuesta a la gente que tenga el mismo problema.

    Para obtener una respuesta lo más rápida y concisa posible, te recomiendo:

    • Propuesto como respuesta osrol martes, 10 de octubre de 2017 14:10
    • Marcado como respuesta nelson111 martes, 10 de octubre de 2017 17:16
    martes, 10 de octubre de 2017 13:01
  • Puedes utilizar el método Find() para intentar encontrar una referencia de nodo, por ejemplo:

    SqlDataReader reader = cmd.ExecuteReader(); //La variable cmd es de tipo SqlCommand
    while (reader.Read())
    {
    	var item = reader["ColName"].ToString();
    	var nodes = treeView1.Nodes.Find(item, false);
    	if (nodes.Count() > 0)
    		nodes[0].Nodes.Add(item, item);
    	else
    		treeView1.Nodes.Add(item, item);
    }
    treeView1.ExpandAll();


    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
    martes, 10 de octubre de 2017 14:31
  • Muchas gracias Jorge
    martes, 10 de octubre de 2017 17:16