2013-01-02 118 views
1

樹狀我發現這個C#的答案上如此,但似乎無法得到這個工作: c# populate treeview from LINQ objectLINQ填充基於分組

在我的例子,假設我有一個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來填充一個TreeView的樣子:

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) 

所以,在我的樹形目錄填充程序中,我創建了以下在內存中查詢:

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可變其次它似乎並沒有工作...
如何正確地做到這一點?

+1

這篇文章:http://codecorner.galanter.net/2010/01/10/using-linq-to-bind-flat-data -to-infragistics-ultrawebtree /描述從ADO.NET數據表中填充Infragistics UltraWebTree,但概念相似,我相信你可以使用類似的遞歸方法。 –

+0

謝謝@Yuriy,這是一個很好的資源,但我仍然堅持嘗試通過LINQ與分組以某種方式做到這一點,我不知道這一部分...... –

回答

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 
+0

謝謝你...它的工作...所有我改變的是我在'Select Group'中添加的,並且在我的for循環中刪除了'grp'的變量類型...謝謝! –