[ Foro de C# ]

TREEVIEW

07-Oct-2014 19:43
Alex carde nanasks
4 Respuestas

Buenas estoy utilizando treeview y necesito obtener los nombres hijos de un nodo, no lo he logrado alguien pudiera guiarme???
he utilizado algo como esto dentro de un for:


var temp2 = Arbol.Parent.HasChildren;
                if (temp2 == true) {
                    for (int i = 0; i < total; i++)
                    {
Arbol.nodes[i].text;
Arbol.nodes[i].tag;
}


pero solo consigo obtener el nombre del nodo no de los hijos, alguna idea?


07-Oct-2014 20:32
Alex carde nanasks

lo hice de la siguiente manera, un poco sucia pero me funciona, les dejo el metodo por si lo necesitan.


 private void llena2(){ 
            
         SQLcomercial.conectar();
         if (SQLcomercial.conexion1.State == ConnectionState.Closed)
         {
             SQLcomercial.conexion1.Open();
         }
        SqlCommand cm = new SqlCommand("select * from tabla ", SQLcomercial.conexion1);
         //SqlDataReader dr = 
        SqlDataReader Leer = cm.ExecuteReader();

        int contadorNodos = 1; 
        int contadorNieto=1;
        TreeNode Hijo = null; 
        TreeNode Nieto = null; 
        TreeNode Padre = new TreeNode();
//arrays
        padrel = new List<string>();
        hijol = new List<string>();
        nietol = new List<string>();
//fin arrays

        while (Leer.Read()) 
        {
            Padre.Text = Leer["principal"].ToString();
            //agregamos los padres al array
            if (Padre.Text!="")//checamos que tenga valor 
            {
            var existe= padrel.Contains(Padre.Text);//checamos si existe en el arreglo
                if (existe == false)//si no esta lo agregamos
                {
                    padrel.Add(Padre.Text); 
                }
            }
            
        //hijo
        Hijo = new TreeNode(Leer["segundo"].ToString()); 
        Hijo.Name = "Nodo" + contadorNodos.ToString();
        Hijo.Text = Leer["segundo"].ToString();


        if (Hijo.Text != "")//checamos que tenga valor 
        {
            var existe = hijol.Contains(Hijo.Text);//checamos si existe en el arreglo
            if (existe == false)
            {
                hijol.Add(Hijo.Text);
            }
        }
        
            //Nieto
        Nieto = new TreeNode(Leer["tercero"].ToString()); 
        Nieto.Name = "Nodo" + contadorNieto.ToString();
        Nieto.Text = Leer["tercero"].ToString();//LEER DE LA BD 

        if (Nieto.Text != "")//checamos que tenga valor 
        {
            var existe = nietol.Contains(Nieto.Text);//checamos si existe en el arreglo
            if (existe == false)
            {
                nietol.Add(Nieto.Text);
            }
        }
        

        Hijo.Nodes.Add(Nieto); //AQUI AÑADIMOS EL HIJO DEL HIJO DEL PADRE 
        Padre.Nodes.Add(Hijo); //AQUI AÑADIMOS EL HIJO AL PADRE 

        contadorNodos = contadorNodos + 1; 
        }

        Padre.Name = "Nodo0"; 
        //Padre.Text = "SALA"; 
        //Padre.Text = Leer["principal"].ToString();

        Arbol.Nodes.AddRange(new TreeNode[] {Padre}); 
} 




08-Oct-2014 00:25
Nacho Cabanes (+83)

No tengo muy claro lo que pretende hacer tu programa, pero, como puedes ver en la página oficial de TreeNode en MSDN, cada nodo tiene una propiedad Text, con la que deberías poder saber su nombre:

http://msdn.microsoft.com/es-es/library/system.windows.forms.treenode(v=vs.110).aspx

(de hecho, estás usando esa propiedad para dar un nombre tanto al Hijo como al Nieto; deberías poder usarla también para leerlo).


10-Oct-2014 00:56
Alex carde nanasks

nacho si lo hago asi, si puedo accesar al nombre pero si lo hago con una sola propiedad solo logre acceder a los nombres de los nodos principales, pero no a los de los hijos.
tienes alguna sugerencia??


10-Oct-2014 01:22
Nacho Cabanes (+83)

¿A qué te refieres con "una sola propiedad"? Y... ¿por que no iteras para recorrer toda la estructura "a ciegas"?






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)