none
TreeView, поиск TreeNode по Value. RRS feed

  • Вопрос

  • Всем доброго времени суток!

    Имеется дочерний объект TreeNode, также известно имя его родителя.

    Подскажите пожалуйста, возможен ли поиск родительских элементов TreeNode по содержимому их Value или имени(Text)?

    25 марта 2013 г. 11:36

Ответы

Все ответы

  • Если значения Value и Text уникальны, хотя бы одно из них, то да. Можно пройти по всем узлам рекурсивно и найти этот узел. Но вот уникальность этих значений никто не гарантирует, кроме вас.
    25 марта 2013 г. 12:02
    Модератор
  • Вот вам несколько таких методов, вам просто немного надо переделать код: вместо Control использовать TreeNode.
    25 марта 2013 г. 12:11
    Модератор
  • Спасибо=) значения value будут уникальны.

    29 марта 2013 г. 9:20
  • Сделал так:

    //Передаем коллекцию нодов и имя родителя(Пример имени:  "Журнал.Автор.Статья.Комменты").
    AddNode(tree_view.Nodes, Node_Full_Name);
    //Если родитель не будет найден, то он создается и затем опять вызывается метод AddNode для оставшегося имени.
    private TreeNode AddNode(TreeNodeCollection Temp_Tree_Node, string Node_Full_Name)
            {
                string Parent_Name;
                string Child_Name;           
                bool Finded_Flag;
                TreeNode Temp_Node = null;
                Node_Full_Name.Trim();
    
                if (Node_Full_Name != null)
                {
                    string[] Temp_Node_Name = Node_Full_Name.Split(new Char[] { '.' }, 2);
                    Parent_Name = Temp_Node_Name[0].Trim();
    
                    if (Temp_Node_Name.Length == 2)
                    {
                        Child_Name = Temp_Node_Name[1].Trim();
                    }
                    else
                    {
                        Child_Name = "";
                    }
    
                    Finded_Flag = false;
    
                    for (int i = 0; i < Temp_Tree_Node.Count; i++)
                    {
                        Temp_Node = Temp_Tree_Node[i];
                        if(Temp_Node.Text == Parent_Name)
                        {
                            Finded_Flag = true;
                            break;
                        }
                    }
                    int idx = -1;
                    if (Finded_Flag == false)
                    {
                        Temp_Node = new TreeNode(Parent_Name);
    
                        for (int i = 0; i < Temp_Tree_Node.Count; i++)
                        {
                            if(String.Compare(Temp_Node.Text,Temp_Tree_Node[i].Text) < 0)
                            {
                                idx = i;
                                break;
                            }
                        }
                        if (idx > -1)
                        {
                            Temp_Tree_Node.AddAt(idx, Temp_Node);
                        }
                        else
                        {
                            Temp_Tree_Node.Add(Temp_Node);
                        }
                    }
                    if (Temp_Node_Name.Length == 1)
                    {
                        return Temp_Node;
                    }
                    else
                    {
                        return AddNode(Temp_Node.ChildNodes, Child_Name);
                    }
                }
                return null;
            }
    Выглядит конечно жутковато, если есть вопросы или предложения, слушаю=)

    • Изменено wUI 1 апреля 2013 г. 10:45
    1 апреля 2013 г. 10:43