2010-09-22 39 views
6
ROOT 
     A 
     B 
      C 
      D 
       E 
     T 
     F 
     G 
     X 

Quiero encontrar nodos principales de E Node (es el número 5). Entonces, salvaré el nodo. Si el número es más pequeño 5. Estoy usando TreeView en el control de Asp.net.cómo encontrar nodos secundarios en el nodo raíz [TreeView]

+0

@ Özkan: ¿Qué número 4? ¿Quieres encontrar la profundidad? –

+0

El padre es 'D', ¿verdad? –

+0

@Albin, sí, quiero encontrar la profundidad de un nodo. – ozkank

Respuesta

7

Sugeriría usar iteraciones recursivas.

private TreeNode FindNode(TreeView tvSelection, string matchText) 
{ 
    foreach (TreeNode node in tvSelection.Nodes) 
    { 
     if (node.Tag.ToString() == matchText) 
     { 
      return node; 
     } 
     else 
     { 
      TreeNode nodeChild = FindChildNode (node, matchText); 
      if (nodeChild != null) return nodeChild; 
     } 
    } 
    return (TreeNode)null; 
} 

Puede utilizar esta lógica para determinar muchas cosas sobre usted nodo y esta estructura también le permite ampliar lo que puede hacer con el nodo y los criterios que desea buscar. Puedes editar mi ejemplo para que se ajuste a tus necesidades.

Por lo tanto, con este ejemplo podría pasar E y esperar tener el nodo E devuelto entonces simplemente si la propiedad primaria del nodo devuelto sería la principal que está buscando.

tn treenode = FindNode(myTreeview, "E") 

tn.parent es el valor que está después.

1
private TreeNode GetNode(string key) 
    { 
     TreeNode n = null ; 
     n = GetNode(key, Tree.Nodes); 
     return n; 
    } 
    private TreeNode GetNode(string key,TreeNodeCollection nodes) 
    { 
     TreeNode n = null; 
     if (nodes.ContainsKey(key)) 
      n = nodes[key]; 
     else 
     { 
      foreach (TreeNode tn in nodes) 
      { 
       n = GetNode(key, tn.Nodes); 
       if (n != null) break; 
      } 
     } 

     return n; 
    } 
+1

Pruebe y explique su código. –

1

Tengo curiosidad, ya que esta es etiquetada como un formulario Web, por qué no se sugirió el método de Microsoft FindNode. Es compatible desde v2.0 hasta ahora (actualmente v4.5.2).

¿Eso no funciona aquí?

De MSDN de Microsoft:

utilizar el método de FindNode para obtener un nodo del control TreeView en el camino valor especificado. La ruta del valor contiene una lista de valores de nodo separados por delimitadores que forman una ruta desde el nodo raíz hasta el nodo actual. Cada nodo almacena su ruta de valor en la propiedad ValuePath. La propiedad PathSeparator especifica el carácter del delimitador que se usa para separar los valores del nodo.

Ejemplo:

void Button_Click(Object sender, EventArgs e) 
{ 

    // Find the node specified by the user. 
    TreeNode node = LinksTreeView.FindNode(Server.HtmlEncode(ValuePathText.Text)); 

    if (node != null) 
    { 
    // Indicate that the node was found. 
    Message.Text = "The specified node (" + node.ValuePath + ") was found."; 
    } 
    else 
    { 
    // Indicate that the node is not in the TreeView control. 
    Message.Text = "The specified node (" + ValuePathText.Text + ") is not in this TreeView control."; 
    } 

} 
Cuestiones relacionadas