Вроде что то поправил в первой

This commit is contained in:
Артём Алейкин 2023-11-01 20:57:24 +04:00
parent bc128a354f
commit a17f19981a

View File

@ -36,9 +36,63 @@ namespace WinFormsLibrary
return false; return false;
} }
/*private bool addData<T>(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 t, string propertyName) private bool addData<T>(T t, string propertyName)
{ {
TreeNodeCollection current = treeView.Nodes; TreeNodeCollection current = treeView.Nodes;
TreeNode newNode = null;
foreach (string h in hierarchy) foreach (string h in hierarchy)
{ {
@ -51,44 +105,55 @@ namespace WinFormsLibrary
return false; return false;
} }
string value = field.GetValue(t).ToString(); string value = field.GetValue(t)?.ToString();
if (!hasValue(current, value)) current.Add(value);
TreeNode elem = null;
if (!hasValue(current, value))
{
newNode = current.Add(value); // Добавляем новый узел и сохраняем его в переменной newNode
}
else
{
// Находим существующий узел с нужным значением
foreach (TreeNode child in current) foreach (TreeNode child in current)
{ {
if (child.Text == value) if (child.Text == value)
{ {
elem = child; newNode = child;
break; break;
} }
} }
}
if (elem != null) current = elem.Nodes; current = newNode.Nodes; // Переходим к дочерним узлам нового узла
} }
else else
{ {
if (!hasValue(current, h)) current.Add(h); // Аналогично добавляем новый узел и сохраняем его в переменной newNode
if (!hasValue(current, h))
TreeNode elem = null; {
newNode = current.Add(h);
}
else
{
// Находим существующий узел с нужным значением
foreach (TreeNode child in current) foreach (TreeNode child in current)
{ {
if (child.Text == h) if (child.Text == h)
{ {
elem = child; newNode = child;
break; break;
} }
} }
}
if (elem != null) current = elem.Nodes; current = newNode.Nodes; // Переходим к дочерним узлам нового узла
} }
} }
return true; return true;
} }
public bool setData<T>(T data, string propertyName) public bool setData<T>(T data, string propertyName)
{ {
bool status = addData<T>(data, propertyName); bool status = addData<T>(data, propertyName);