C# 表示分层数据.net winforms

C# 表示分层数据.net winforms,c#,.net,winforms,C#,.net,Winforms,如何表示以下分层数据? 应该使用什么控件,如果可能的话,示例将有所帮助 -node -----node1 - -data--data --data -------------node111 -- data -- data -------------node112 -- data -- data -------------node113 -- data -- data -----node2 - -data--data --data -------------node1121 -- data --

如何表示以下分层数据? 应该使用什么控件,如果可能的话,示例将有所帮助

-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
如果可能的话,我需要在大多数单元格中放置几个图标

我找到了这个教程,有人能给我提供更多信息吗

如果可能,怎么可能


非常感谢。

使用TreeView控件

一种方法可能是创建派生的TreeNode对象,强制它包含
列表

//需要声明:使用System.Windows.Forms;
//样本数据类
公共类数据
{
公共字符串名称;
公共int ID;
}
公共类XTreeNode:TreeNode
{
列出数据=新列表();
公共XTreeNode(字符串theNodeID)
{
this.Text=nodeid;
}
public void addData(data newData)
{
添加(新数据);
}
}
下面是构建上述数据结构的实例(在WinForm上)的一个(不优雅)示例:假设您在表单上有一个名为“treeView1”的TreeView:

    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()));
    }
XTreeNode当前节点;
数据流数据;
对于(int i=0;i<10;i++)
{
//创建节点并将其添加到“treeView1”
currentNode=新的XTreeNode(i.ToString());
treeView1.Nodes.Add(currentNode);
//将一些数据项添加到派生树节点的列表中
currentData=新数据{Name=“one”,ID=100};
currentNode.addData(currentData);
currentData=新数据{Name=“two”,ID=200};
currentNode.addData(currentData);
currentData=新数据{Name=“three”,ID=300};
currentNode.addData(currentData);
//添加子节点的示例
currentNode.Nodes.Add(新的XTreeNode((i*100.ToString()));
}
对于如何直观地显示与每个节点关联的
列表的问题:通常的方法是将树视图与列表视图组合,并同步它们的位置和项目高度:然后将
列表
显示在与相应树节点相同的“行”上

当然,您可以实现自己的节点和NodeCollection实体,它们完全独立于任何控件:本例展示了一种混合情况,即依赖.NET控件作为数据结构和表示机制


CodeProject上的TreeView/ListView组合有一个很好的例子,多年来一直在维护、更新和扩展:Phillip Piper的:,2006年首次发布,2009年10月最后更新:它的功能非常丰富,相比之下,imho,使用商业组件。

内置的Windows窗体控件对此不是很好。实际上,您需要的是一个树-网格混合控件(也称为多列树视图或树列表)

DevExpress有一个,这是我使用的(不是免费的),可能是最接近您要求的。如果正确设置分组,Telerik还可以以分层方式显示网格数据

如果这些价格太高,你可以试试。或者,如果您迫切需要免费的东西,请查看此CodeProject页面:。它将比商业产品更加古怪和难以使用,但它会起到作用


请注意,我假设数据是统一的,您基本上希望为层次结构中的每个节点显示相同的数据。如果数据是异构的(完全不同的列取决于节点或级别的类型),那么实际需要使用的是分层GridView。你可以从上面列出的同一个出版商那里得到。我不知道有哪一个半正式的免费版本。

在treeview控件中,我如何在每个节点中放置几个图标?并将其与GridControl结合起来?这里的一个关键问题可能是:您是否在寻找一个在代码中定义“纯数据结构”的答案:独立于任何现有的WinForms控件,还是第三个。政党控制。或者,您是否愿意接受一个利用现有或第三方的答案。政党控制?请看我对洛基回答的评论。
    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()));
    }