LINQ基于分组填充树视图
我在SO上找到了这个C#答案,但似乎无法实现这一点: c#从LINQ对象填充树视图
在我的例子中,假设我有一个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
变量使用什么数据类型,其次它似乎没有工作……
我该怎么做呢?
这是什么意思,你的意思是?
(对不起,再也不写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); } }
编辑:“group by”构造返回一组IGrouping
– 您可以将其视为键值对,键是您分组的对象,值是所有元素匹配那把钥匙。
这是我相信的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