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

Je veux trouver les nœuds parents du nœud E (c'est le numéro 5). Ensuite, je vais sauver le noeud. Si le nombre est plus petit 5. J'utilise TreeView dans le contrôle Asp.net.comment trouver des nœuds enfants au nœud racine [TreeView]

+0

@ Özkan: Quel numéro 4? Voulez-vous trouver la profondeur? –

+0

Le parent est 'D', non? –

+0

@Albin, oui, je veux trouver la profondeur d'un nœud. – ozkank

Répondre

7

Je suggère d'utiliser des itérations récursives.

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; 
} 

Vous pouvez utiliser cette logique pour déterminer beaucoup de choses sur vous NODE et cette structure vous permet également de développer ce que vous pouvez faire avec le nœud et les critères que vous souhaitez rechercher. Vous pouvez modifier mon exemple pour répondre à vos propres besoins. Ainsi, avec cet exemple, vous pouvez passer dans E et attendre que le nœud E soit retourné alors simplement si la propriété parent du nœud retourné serait le parent que vous recherchez.

tn treenode = FindNode(myTreeview, "E") 

tn.parent est la valeur que vous recherchez.

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

Essayez et expliquez votre code. –

1

Je suis curieux, car cela est marqué comme WebForm, pourquoi la méthode FindNode de Microsoft n'a pas été suggéré. Il est compatible depuis la v2.0 jusqu'à maintenant (actuellement v4.5.2).

Est-ce que ça ne marche pas ici?

De MSDN de Microsoft:

Utilisez la méthode FindNode pour obtenir un nœud du contrôle TreeView sur le chemin de la valeur spécifiée. Le chemin de la valeur contient une liste de valeurs de noeud séparées par des délimiteurs qui forment un chemin du noeud racine au noeud courant. Chaque noeud stocke son chemin de valeur dans la propriété ValuePath. La propriété PathSeparator spécifie le caractère de délimiteur utilisé pour séparer les valeurs de noeud.

Exemple:

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."; 
    } 

} 
Questions connexes