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)

そこで、ツリービューの入力ルーチンで、次のメモリ内クエリを作成します。

    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 に答える