Как заполнить treeview ( treenode ) данными из datatable?
У меня есть заполненная datatable экземплярами классов. В таблице есть столбы с названием Name и Name_of_Cement. Но в столбце Name есть повторяющиеся элементы. К примеру:

Подскажите как заполнить treeview ( treenode ) что бы выглядело примерно так, но с учетом того что таблица может дополняться одинаковыми Name
Кажется все костыли перепробовал и ничего не помогло. Буду благодарен ответу
Прикрепляю структуру таблицы
public DataTable todada<T>(IList<T> data)
{
PropertyDescriptorCollection props =
TypeDescriptor.GetProperties(typeof(T));
props = props.Sort(new string[] { "Name", "NameOfCement", "Brand", "Manufacturer", "Clas", "price", "IDHL", "types" } );
for (int i = 0; i < props.Count; i++)
{
PropertyDescriptor prop = props[i];
if (table.Columns.Contains(prop.Name))
{ }
else
{
table.Columns.Add(prop.Name, typeof(string));
}
}
object[] values = new object[props.Count];
foreach (T item in data)
{
for (int i = 0; i < values.Length; i++)
{
values[i] = props[i].GetValue(item);
}
table.Rows.Add(values);
}
return table;
}
list_of_cemetns.add_roman("Романцемент", "Сибирь", 500, "РосЦемент", 40,5000 );
list_of_cemetns.add_roman("Романцемент", "Вихрь", 600, "РосЦемент", 50, 4500);
list_of_cemetns.add_port("Портланд", "Прой", 500, "РосЦемент", 50,4500,5000,"быстро");
list_of_cemetns.add_aluma("Алумацемент", "Метель", 600, "РосЦемент", 50, 4500);
Ответы (1 шт):
Я нашел решение в том чтобы сначала заполнить родительскую ветвь всеми элементами
foreach (DataRow v in table.Rows)
{
node.Nodes[0].Nodes.Add(v[0].ToString());
}
Затем пройтись по этим элементам и удалить повторяющиеся с помощью обычных циклов for ( до более рациональной штуки не додумался )
string x = " ";
for (int k = 0; k < node.Nodes[0.Nodes.Count; k++)
{
if (node.Nodes[0].Nodes[k].Text != x)
{
x = node.Nodes[0].Nodes[k].Text;
}
else
{
node.Nodes[0].Nodes.Remove(node.Nodes[0].Nodes[k]);
}
}
И затем заполнил его элементами из второго столбца с помощью switch
foreach (DataColumn col in table.Columns)
{
if (col.ColumnName == "Name")
{
foreach (DataRow row in table.Rows)
{
switch (row[col.ColumnName].ToString())
{
case "Портланд":
node.Nodes[0].Nodes[r].Nodes.Add(row[1].ToString());
r++;
break;
case "Романцемент":
node.Nodes[0].Nodes[r].Nodes.Add(row[1].ToString());
break;
case "Алумацемент":
r++;
node.Nodes[0].Nodes[r].Nodes.Add(row[1].ToString());
break;
}
}
}
}
