1

我在 SO 上找到了这个 C# 答案,但似乎无法正常工作: c# populate treeview from LINQ object

就我而言,假设我有一个List(Of Report_Data),例如,看起来像这样:

Var1   Var2        
V1     Sub Item 1      
V1     Sub Item 2      
V1     Sub Item 3      
V2     Sub Item 1      
V2     Sub Item 2     
V3     Sub Item 1

我希望使用 LINQ 来填充树视图,如下所示:

V1 (CheckBox)
-------Sub Item 1  (CheckBox)
-------Sub Item 2  (CheckBox)
-------Sub Item 3  (CheckBox)
V2 (CheckBox)
-------Sub Item 1  (CheckBox)
-------Sub Item 2  (CheckBox)
V3 (CheckBox)
-------Sub Item 1  (CheckBox)

因此,在我的 Treeview 填充例程中,我创建了以下内存查询:

    Dim GroupedReports = From Rpt As Report_Data In ReportsToBeProcessed
                         Group Rpt By Rpt.Var1 Into Group

然后我想我可以循环遍历组,然后循环分组对象以填充树视图 - 类似于以下内容:

    For Each Grp As Object In GroupedReports 
        ... Add Parent node ...
        For Each Rpt As Report_Data In Grp
            ... Add Child Node ...
        Next
    Next

首先,我不知道我的Grp变量使用什么数据类型,其次它似乎没有工作......
我该如何正确地做到这一点?

4

1 回答 1

2

像这样的东西,你的意思是?

(对不起,再也不用写VB了,所以我能做的最好是C#)

var grped = 
    from report in reports
    group report by report.Var1 into grp
    select grp;
var treeView = new System.Windows.Forms.TreeView();
foreach(var grouping in grped)
{
    var nodeFor = treeView.Nodes.Add(grouping.Key);
    foreach(var item in grouping)
    {
        var subitem = nodeFor.Nodes.Add(item.Var2);
    }
}

编辑:“分组依据”构造返回一组IGrouping<TKey, TValue>-您可以将其视为键值对,键是您分组的对象,值是与该键匹配的所有元素。

这是我相信的 VB.Net 代码:

Dim grped = From report In reports
            Group report By report.Var1 into grp
            Select grp

Dim treeView as New System.Windows.Forms.TreeView()

For Each grouping In grped
    Dim nodeFor = treeView.Nodes.Add(grouping.Key)
    For Each item In grouping
        Dim subitem = nodeFor.Nodes.Add(item.Var2)
    Next
Next
于 2013-01-02T20:53:06.487 回答