我如何表示以下分层数据? 应该使用什么控制,如果可能的话,例子会有所帮助。
-node
-----node1 - -data--data --data
-------------node111 -- data -- data
-------------node112 -- data -- data
-------------node113 -- data -- data
-----node2 - -data--data --data
-------------node1121 -- data -- data
-----node3 - -data--data --data
如果可能的话,我需要在大多数细胞中放入几个图标。
我找到了这个教程Link,有人可以为我提供更多信息吗?
如果可以,那可能吗?
非常感谢。
答案 0 :(得分:2)
内置的Windows窗体控件并不适用于此。您实际需要的是树格混合控件(AKA多列树视图或TreeList)。
DevExpress有一个XtraTreeList,这是我使用的(不是免费的),可能是你最接近你所要求的。如果您正确设置分组,Telerik的GridView也可以以分层方式显示网格数据。
如果这些价格太高,您可以尝试FlexibleTreeView。或者,如果您迫切需要免费的东西,请查看此CodeProject页面:Advanced TreeView for .NET。与商业产品相比,它将更加古怪且难以使用,但它可以完成这项工作。
请注意,我假设数据是统一的,您基本上希望为层次结构中的每个节点显示相同的数据。如果数据是异构的(根据节点或级别的类型完全不同的列),您实际想要使用的是分层GridView。您可以从上面列出的相同发布商处获取这些内容。我不知道有任何不太合适的免费版本。
答案 1 :(得分:1)
使用TreeView控件
答案 2 :(得分:1)
一种方法可能是创建派生的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>
的问题:通常的方法是将Treeview与ListView结合,并同步它们的位置和项目高度:然后显示{{1与相应的TreeNode在同一“行”上。
当然,您可以实现自己的Node和NodeCollection实体,这些实体完全独立于任何控件:此示例提供了一个依赖于.NET控件的混合大小写,用作数据结构和表示机制。
在CodeProject上有一个组合TreeView / ListView的优秀示例多年来一直在维护,更新和扩展:Phillip Piper:"A Much Easier to Use ListView",2006年首次发布,2009年10月更新:其功能是如此丰富,如果比较有利,imho,与商业组件。