1

I have a linq object that i'm trying to fill a treeview from using c# winforms.

Sample

Column 1   Column 2   Column 3        
Test 1     Item A     Sub Item 1      
Test 1     Item A     Sub Item 2      
Test 1     Item A     Sub Item 3      
Test 1     Item B     Sub Item 1      
Test 1     Item B     Sub Item 2     
Test 1     Item B     Sub Item 3  

And fill the treeview like

Test 1 (CheckBox)
------Item A (CheckBox)
-------------Sub Item 1  (CheckBox)
-------------Sub Item 2  (CheckBox)
-------------Sub Item 3  (CheckBox)
------Item B (CheckBox)
-------------Sub Item 1  (CheckBox)
-------------Sub Item 2  (CheckBox)
-------------Sub Item 3  (CheckBox)

What is the easiest way to achieve this?

Thanks Sp

3
  • I see a lot of text that appears to be formatted for DOS. Can you please post some C# (the LINQ you said you wrote). Have you tried the winforms treeview control? Commented Aug 17, 2012 at 13:43
  • i am using a winforms control but am unable to get the object to show properly Commented Aug 17, 2012 at 13:46
  • Better design to have table with ID, ParentID, Name fields and use recursion to fill treeview. Examples here, here and so on. Commented Aug 17, 2012 at 13:47

1 Answer 1

2

Well, if you perform the following query:

var query = data.GroupBy(item => item.Column1)
                .Select(group => group.GroupBy(item => item.Column2))
                .Select(group => group.Select(innerGroup => 
                    innerGroup.GroupBy(item => item.Column3)));

You will have all of the items grouped first by column1, then 2 and 3, so It's already in a tree structure. Now you just need to have 3 nested for loops to add the items to the treeview.

foreach (var outermostGroup in query)
{
    //add node for outermostGroup's key
    foreach (var middleGroup in outermostGroup)
    {
        //add child node of the above node for middleGroup key
        foreach (var innerGroup in middleGroup)
        {
            //add child node of the above node for innerGroup key
        }
    }
}

Clearly this code only works if there are a fixed number of columns with a fixed (max) depth. If you don't know the number of columns and can have an arbitrary depth then you'd need a fairly radically different approach.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.