Одним из способов может быть создание производного объекта 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()));
}
На вопрос о том, как визуально отобразить List<data>
, связанный с каждым узлом: обычным способом было бы объединить древовидную структуру с ListView и синхронизировать их местоположение и высоту элементов: затем отобразить List<data>
на та же «строка», что и у соответствующего TreeNode.
Конечно, вы можете реализовать свои собственные сущности Node и NodeCollection, которые полностью независимы от любого элемента управления: в этом примере представлен смешанный случай использования элемента управления .NET в качестве структуры данных и механизма представления.
Существует отличный пример комбинации TreeView / ListView на CodeProject, которая поддерживается, обновляется и расширяется годами: Филипп Пайпер: «Намного проще использовать ListView» , впервые опубликован в 2006 году, последнее обновление, октябрь 2009 года: его функциональность настолько богата, что, если сравнивать, imho с коммерческими компонентами