[ Foro de C# ]
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?
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});
}
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).
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??
¿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.)