Member 12694392 Ответов: 1

Участок многоуровневого древовидного изображения в ASP.NET с#


Я пытаюсь построить дерево с помощью treeview в asp.net.
проблема заключается в том, что я могу сравнить родительский узел, но могу сравнить узел parent1, что приводит к дублированию узлов parent1.
пример:
если данные следующие
MainNode1.Parent1.Child1, Так, MainNode1.Parent1.Child2 и так далее....
Я получаю несколько родительских 1 под MainNode1.
Пожалуйста, помогите мне
ТИА

Что я уже пробовал:

<pre>NDA.Fill(dt); //tag data in data table 
int max_row = Convert.ToInt32(dt.Rows.Count);
                if (max_row > 0) //if no tags dont execute
                {
                    try
                    {
                        for (int i = 0; i <= max_row; i++)
                        {

                            string combination = Convert.ToString(dt.Rows[i["tag_name"]);
                            string[] data = combination.Split('.');
                            TreeNodeCollection nodes = TreeView1.Nodes;
                            TreeNode dnode = new TreeNode();
                            //int pnode = 0;
                            //TreeNode FindNode = null;
                            foreach (string name in data)
                            {
                                node = TreeView1.FindNode(name);
                                if (node == null)
                                {
                                    node = new TreeNode(name);
                                    nodes.Add(node);
                                }
                                nodes = node.ChildNodes;
                          }

                        }

                    }
                    catch (Exception e1)
                    {
                    }

1 Ответов

Рейтинг:
11

Richard Deeming

Попробовать это:

NDA.Fill(dt);

foreach (DataRow row in dt.Rows)
{
    string tagName = Convert.ToString(row["tag_name"]);
    string[] parts = tagName.Split('.');
    TreeNodeCollection nodes = TreeView1.Nodes;
    for (int i = 0; i < parts.Length; i++)
    {
        string valuePath = string.Join(TreeView1.PathSeparator, parts, 0, i);
        TreeNode node = TreeView1.FindNode(valuePath);
        if (node == null)
        {
            node = new TreeNode(parts[i]);
            nodes.Add(node);
        }
        
        nodes = node.ChildNodes;
    }
}
То FindNode метод[^] ожидает, что будет найден полный путь к узлу, в то время как вы просто передаете значение текущего узла.

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


Member 12694392

круто это сработало со следующими изменениями на Ричарде посте

string valuePath = строка.Присоединиться(Элемента Управления Treeview1.PathSeparator.ToString(), parts, 0, i+1);

Спасибо Ричард Диминг