代表分层数据.net winforms

时间:2010-03-03 17:18:52

标签: c# .net winforms

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

-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,有人可以为我提供更多信息吗?

如果可以,那可能吗?

非常感谢。

3 个答案:

答案 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,与商业组件。