【问题标题】:c# populate treeview from LINQ objectc# 从 LINQ 对象填充树视图
【发布时间】:2012-08-17 13:40:06
【问题描述】:

我有一个 linq 对象,我正在尝试使用 c# winforms 填充树视图。

样本

Column 1   Column 2   Column 3        
Test 1     Item A     Sub Item 1      
Test 1     Item A     Sub Item 2      
Test 1     Item A     Sub Item 3      
Test 1     Item B     Sub Item 1      
Test 1     Item B     Sub Item 2     
Test 1     Item B     Sub Item 3  

然后像这样填充树视图

Test 1 (CheckBox)
------Item A (CheckBox)
-------------Sub Item 1  (CheckBox)
-------------Sub Item 2  (CheckBox)
-------------Sub Item 3  (CheckBox)
------Item B (CheckBox)
-------------Sub Item 1  (CheckBox)
-------------Sub Item 2  (CheckBox)
-------------Sub Item 3  (CheckBox)

实现这一目标的最简单方法是什么?

谢谢 Sp

【问题讨论】:

  • 我看到很多似乎是为 DOS 格式化的文本。您能否发布一些 C#(您说您编写的 LINQ)。你试过winforms treeview控件吗?
  • 我正在使用 winforms 控件,但无法正确显示对象
  • 更好的设计让表格带有 ID、ParentID、Name 字段并使用递归填充树形视图。例如herehere 等等。

标签: c# winforms


【解决方案1】:

好吧,如果您执行以下查询:

var query = data.GroupBy(item => item.Column1)
                .Select(group => group.GroupBy(item => item.Column2))
                .Select(group => group.Select(innerGroup => 
                    innerGroup.GroupBy(item => item.Column3)));

您将首先按第 1 列、第 2 列和第 3 列对所有项目进行分组,因此它已经处于树结构中。现在您只需要有 3 个嵌套的 for 循环即可将项目添加到树视图。

foreach (var outermostGroup in query)
{
    //add node for outermostGroup's key
    foreach (var middleGroup in outermostGroup)
    {
        //add child node of the above node for middleGroup key
        foreach (var innerGroup in middleGroup)
        {
            //add child node of the above node for innerGroup key
        }
    }
}

显然,此代码仅适用于具有固定(最大)深度的固定数量的列。如果您不知道列数并且可以有任意深度,那么您需要一种完全不同的方法。

【讨论】:

    猜你喜欢
    • 2014-08-23
    • 1970-01-01
    • 2013-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-01
    相关资源
    最近更新 更多