2010-03-03 64 views
4

我如何表示以下分层数据? 应该使用什么控件,如果可能的话,将会有所帮助。代表分层数据.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,有人可以支持我更多的信息吗?

如果是的话,那可能吗?

非常感谢。

+0

这里的一个关键问题可能是:你是否在寻找一个在代码中定义“纯数据结构”的答案:独立于任何现有的WinForms控件或第3个。党的控制。或者,你是否愿意接受使用现有或第三方案的答案。党控制?同样,请参阅我对Lokey的回答的评论。 – BillW 2010-03-04 14:36:26

回答

2

内置的Windows Forms控件对此并不好。你真正想要的是一个树型网格混合控制(AKA多列树视图或TreeList)。

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

如果价格过于陡峭,您可以尝试FlexibleTreeView。或者如果你迫切需要免费的东西,看看这个CodeProject页面:Advanced TreeView for .NET。这将是一个很多比商业产品更古怪和难以使用,但它会做的工作。

请注意,我假设数据是统一的,您基本上想要为层次结构中的每个节点显示相同的数据。如果数据是异构的(完全不同的列取决于节点或级别的类型),实际上您想要使用的是分层GridView。您可以从上面列出的相同发布商那里获得这些信息。我不知道任何一半体面的免费版本。

1

使用TreeView控件

+0

如何在treeview控件中,我可以在每个节点中放置几个​​图标?并将其与gridcontol? – 2010-03-03 17:25:05

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组合起来,并同步它们的位置和项目高度:然后在与相应的TreeNode相同的“行”上显示List<data>

当然,您可以实现您自己的Node和NodeCollection实体,这些实体完全独立于任何控件:此示例展示了一个依赖.NET控件的混合大小写来充当数据结构和呈现机制。

在CodeProject上有一个很好的组合TreeView/ListView的例子,多年来一直保持,更新和扩展:Phillip Piper's:"A Much Easier to Use ListView",2006年首次发布,2009年10月最后更新:它的功能非常丰富,如果与商业组件相比,毫不逊色。