【问题标题】:Representing hierarchical data .net winforms表示分层数据 .net winforms
【发布时间】:2010-03-04 14:31:49
【问题描述】:

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

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

如果可以的话可以吗?

非常感谢。

【问题讨论】:

  • 这里的一个关键问题可能是:您是否正在寻找在代码中定义“纯数据结构”的答案:独立于任何现有的 WinForms 控件,或者第三个。党控制。或者,您是否愿意接受利用现有或 3rd 的答案。党控?另请参阅我对 Lokey 回答的评论。

标签: c# .net winforms


【解决方案1】:

内置的 Windows 窗体控件并不适用于此。您实际上正在寻找的是一个树网格混合控件(AKA 多列树视图或 TreeList)。

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

如果这些价格太高,您可以试试FlexibleTreeView。或者,如果您迫切需要免费的东西,请查看此 CodeProject 页面:Advanced TreeView for .NET。它会比商业产品很多更加古怪和难以使用,但它会完成这项工作。

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

【讨论】:

    【解决方案2】:

    使用 TreeView 控件

    【讨论】:

    • 如何在树视图控件中在每个节点中放置多个图标?并将其与 gridcontol 结合起来?
    【解决方案3】:

    一种方法可能是创建一个派生的 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,在 Form 上名为“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&lt;data&gt; 的问题:通常的方法是将 Treeview 与 ListView 组合,并同步它们的位置和项目高度:然后在与对应的 TreeNode 相同的“行”。

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

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

    【讨论】:

      猜你喜欢
      • 2019-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-23
      • 2010-11-03
      相关资源
      最近更新 更多