diff --git a/WinFormsProject/WinFormsLibrary/TreeClass.cs b/WinFormsProject/WinFormsLibrary/TreeClass.cs index d660e63..1183e56 100644 --- a/WinFormsProject/WinFormsLibrary/TreeClass.cs +++ b/WinFormsProject/WinFormsLibrary/TreeClass.cs @@ -36,9 +36,63 @@ namespace WinFormsLibrary return false; } + /*private bool addData(T t, string propertyName) + { + TreeNodeCollection current = treeView.Nodes; + + foreach (string h in hierarchy) // заходим в иерархию через цикл и проверяем каждую строку + { + if (h == propertyName) // если строка равна передаваемому полю, то ... + { + var field = t.GetType().GetField(h); // получаем тип параметризированного класса и ищем поле "h" + + if (field == null) // если оно равно null(то есть его нету) + { + return false; // возвращаем false + } + + string value = field.GetValue(t).ToString(); // если такая ветка уже есть, то достаем её значение(строку)в переменную value + if (!hasValue(current, value)) current.Add(value); // Если значение не существует в текущей ветке, добавляем его + + TreeNode elem = null; // создаем новый объект узла + + foreach (TreeNode child in current) // задаем цикл, в котором просматриваем все подветки текущей ветки + { + if (child.Text == value) // если подветка с таким названием есть, то ... + { + elem = child; // то переходим в эту подветку + break; // выходим из цикла + } + } + + if (elem != null) current = elem.Nodes; // если нашлась подветка с таким названием, то текущая коллекция узлов ставовится коллецией узлов подветки + } + else // если строка не равна передаваемому полю, то ... + { + if (!hasValue(current, h)) current.Add(h); // проверяем, есть ли в текущей коллекции узлов ветка с таким значением, если нету, то добавляем новый узел с названием поля "h" + + TreeNode elem = null; // создаем новый объект узла + + foreach (TreeNode child in current) // задаем цикл, в котором просматриваем все подветки текущей ветки + { + if (child.Text == h) // если подветка с названием равным "h" есть, то ... + { + elem = child; // мы спускаемся по иерархии в эту подветку + break; // выходим из этого цикла + } + } + + if (elem != null) current = elem.Nodes; // если нашлась подветка с названием "h", то переменная, хранящая текущую коллекцию узлов, получает коллекцию подветки + } + } + + return true; // возвращаем true(т.е. успешное добавление) + }*/ + private bool addData(T t, string propertyName) { TreeNodeCollection current = treeView.Nodes; + TreeNode newNode = null; foreach (string h in hierarchy) { @@ -51,44 +105,55 @@ namespace WinFormsLibrary return false; } - string value = field.GetValue(t).ToString(); - if (!hasValue(current, value)) current.Add(value); + string value = field.GetValue(t)?.ToString(); - TreeNode elem = null; - - foreach (TreeNode child in current) + if (!hasValue(current, value)) { - if (child.Text == value) + newNode = current.Add(value); // Добавляем новый узел и сохраняем его в переменной newNode + } + else + { + // Находим существующий узел с нужным значением + foreach (TreeNode child in current) { - elem = child; - break; + if (child.Text == value) + { + newNode = child; + break; + } } } - if (elem != null) current = elem.Nodes; + current = newNode.Nodes; // Переходим к дочерним узлам нового узла } else { - if (!hasValue(current, h)) current.Add(h); - - TreeNode elem = null; - - foreach (TreeNode child in current) + // Аналогично добавляем новый узел и сохраняем его в переменной newNode + if (!hasValue(current, h)) { - if (child.Text == h) + newNode = current.Add(h); + } + else + { + // Находим существующий узел с нужным значением + foreach (TreeNode child in current) { - elem = child; - break; + if (child.Text == h) + { + newNode = child; + break; + } } } - if (elem != null) current = elem.Nodes; + current = newNode.Nodes; // Переходим к дочерним узлам нового узла } } return true; } + public bool setData(T data, string propertyName) { bool status = addData(data, propertyName);