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

Я хочу найти родительские узлы E Node (это номер 5). Затем я сохраню узел. Если число меньше 5. Я использую TreeView в элементе управления Asp.net.Как найти дочерние узлы в корневом узле [TreeView]

+0

@ Özkan: Какой номер 4? Вы хотите найти глубину? –

+0

Родитель является «D», не так ли? –

+0

@ Албин, да, я хочу найти глубину узла. – ozkank

ответ

7

Я бы предложил использовать рекурсивные итерации.

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

Вы можете использовать эту логику, чтобы определить многое о вас узел и эта структура также позволяет расширить то, что вы можете делать с узлом и критериями, которые вы хотите найти. Вы можете отредактировать мой пример, чтобы он соответствовал вашим потребностям.

Таким образом, в этом примере вы можете пройти в E и ожидать, что узел E вернется, а затем просто , если родительское свойство возвращаемого узла будет родителем, которым вы являетесь.

tn treenode = FindNode(myTreeview, "E") 

tn.parent - это то, что вам нужно.

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

Попробуйте и объясните свой код. –

1

мне очень интересно, так как это помечено как WebForm, почему метод от Microsoft FindNode не был предложен. Он совместим с v2.0 до настоящего времени (в настоящее время v4.5.2).

Не работает ли это здесь?

Из MSDN от Microsoft:

Используйте метод FindNode, чтобы получить узел из элемента управления TreeView по указанному пути значения. Путь значений содержит список значений узлов, разделенных разделителем, которые формируют путь от корневого узла до текущего узла. Каждый узел сохраняет свой путь значения в свойстве ValuePath. Свойство PathSeparator указывает символ разделителя, который используется для разделения значений узлов.

Пример:

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

} 
Смежные вопросы