我在S.O.上找到了这个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
变量使用什么数据类型,其次它似乎不起作用...
我该如何正确地做到这一点?
答案 0 :(得分: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);
}
}
编辑:
“group by”构造返回一组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