Одним из способов может быть создание производного объекта TreeNode, заставить его содержать List<data>
:
// requires declaration of : using System.Windows.Forms;
// sample data class
public class data
{
public string Name;
public int ID;
}
public class XTreeNode : TreeNode
{
List<data> theData = new List<data>();
public XTreeNode(string theNodeID)
{
this.Text = theNodeID;
}
public void addData(data newData)
{
theData.Add(newData);
}
}
Вот (не изящный) пример того, что строительство экземпляра выше структура данных может выглядеть следующим образом (на WinForm): предположим, у вас есть TreeView, названный «treeView1 на форме:
XTreeNode currentNode;
data currentData;
for (int i = 0; i < 10; i++)
{
// create the node and add it to the 'treeView1
currentNode = new XTreeNode(i.ToString());
treeView1.Nodes.Add(currentNode);
// add some data entries to the List<data> of the derived TreeNode
currentData = new data {Name = "one", ID = 100};
currentNode.addData(currentData);
currentData = new data { Name = "two", ID = 200 };
currentNode.addData(currentData);
currentData = new data { Name = "three", ID = 300 };
currentNode.addData(currentData);
// sample of adding a child node
currentNode.Nodes.Add(new XTreeNode((i * 100).ToString()));
}
на вопрос о том, как лет u woud визуально отображает List<data>
, связанный с каждым Узлом: обычным способом было бы объединить Treeview с ListView и синхронизировать их местоположения и высоты элементов: затем отобразить List<data>
в той же «строке», что и соответствующий TreeNode.
Конечно, вы можете реализовать свои собственные узлы Node и NodeCollection, которые полностью независимы от любого элемента управления: этот пример представляет собой смешанный случай использования элемента управления .NET, который служит как структурой данных, так и механизмом представления.
Отличный пример сочетания TreeView/ListView в CodeProject, который поддерживался, обновлялся и расширялся в течение многих лет: Phillip Piper's: "A Much Easier to Use ListView", впервые опубликованный в 2006 году, последнее обновление октября 2009 года: его функциональность настолько богата, что если сравнивать выгодно, imho, с коммерческими компонентами.
Ключевым вопросом здесь может быть: вы ищете ответ, который определяет «чистую структуру данных» в коде: независимо от любых существующих элементов управления WinForms, или третьего. партийный контроль. Или вы согласны принять ответ, который использует существующий или третий. партийный контроль? Пожалуйста, см. Мой комментарий к ответу Локи. – BillW