как найти дочерние узлы в корневом узле [TreeView] - PullRequest
6 голосов
/ 22 сентября 2010
 ROOT
      A 
        B
          C 
            D 
              E
        T
      F
      G
        X

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

Ответы [ 3 ]

7 голосов
/ 22 сентября 2010

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

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 голос
/ 02 июля 2014

Мне любопытно, поскольку это помечено как 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.";
  }

}
1 голос
/ 04 апреля 2013
    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;
    }
...