Я нашел решение в том чтобы сначала заполнить родительскую ветвь всеми элементами
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;
}
}
}
}