This is a migrated thread and some comments may be shown as answers.

Generate Hierarchy Grid View with multiple levels

9 Answers 699 Views
GridView
This is a migrated thread and some comments may be shown as answers.
Đạt
Top achievements
Rank 1
Đạt asked on 03 Nov 2016, 04:14 AM

Hello all,

I want to generate hierarchy grid view with multiple levels like the picture http://screencast.com/t/L0snTsuj

Currently i use AutoGenerateHierarchy and create recursive data, i generated three levels like the picture http://screencast.com/t/ZtxNcwMqPaz

However i could not found any solutions for latest children template (different columns and data, grouping by columns, and only generate when parent expanded)

Please help me!!!

Thanks
Regards

9 Answers, 1 is accepted

Sort by
0
Dess | Tech Support Engineer, Principal
Telerik team
answered on 03 Nov 2016, 12:49 PM
Hello Dat,

Thank you for writing.  

I would like to note that when you setup grid hierarchy, you add a template which is common for the entire child level. Hence, it uses common columns. However, in order to achieve your goal, you can add several child templates and display the relevant one (and hide the other/s) when expanding a master row. A sample approach is demonstrated in our Formatting Cells help article >> Example 4: Hiding child tabs when no data is section.

As to the grouping question, note that you can add a GroupDescriptor programmatically to the desired child GridViewTemplate. The following help article is quite useful on this topic: http://docs.telerik.com/devtools/winforms/gridview/grouping/setting-groups-programmatically

I hope this information helps. Should you have further questions I would be glad to help.

Regards,
Dess
Telerik by Progress
Check out the Windows Forms project converter, which aids the conversion process from standard Windows Forms applications written in C# or VB to Telerik UI for WinForms.For more information check out this blog post and share your thoughts.
0
Đạt
Top achievements
Rank 1
answered on 07 Nov 2016, 04:25 AM

Hi Dess,

Thanks for your helps!

However i think it so difficult implement and custom because everything are dynamic, so i use TableLayoutPanel to custom it.

Thanks
Regards
Dat

0
Dess | Tech Support Engineer, Principal
Telerik team
answered on 07 Nov 2016, 10:48 AM
Hello Đạt, 

Thank you for writing back. 

Feel free to use this approach which suits your requirements best. However, the recommended approach is to use two different child templates with the respective columns and show only one of the child templates at a time for the given parent row.

If you have any additional questions, please let me know. 

Regards,
Dess
Telerik by Progress
Check out the Windows Forms project converter, which aids the conversion process from standard Windows Forms applications written in C# or VB to Telerik UI for WinForms.For more information check out this blog post and share your thoughts.
0
Đạt
Top achievements
Rank 1
answered on 16 Nov 2016, 06:46 AM

Hi Dess,

Thanks for your helps!

Thanks
Regards
Dat

0
Martin
Top achievements
Rank 1
Iron
answered on 30 Nov 2016, 07:41 PM
Hi. I used the example Formatting Cells help article >> Example 4: Hiding child tabs when no data is available section.
But I have a problem, while hiding the tab that has no data, sometimes expands several rows at the same time, but in isolation, I can not find the pattern of error.

Thank you very much, excuse the English, is a translator, I speak Spanish.
0
Dess | Tech Support Engineer, Principal
Telerik team
answered on 01 Dec 2016, 10:49 AM
Hello Martin,

Thank you for writing.  

Would it be possible to provide a full code snippet reproducing the problem you are facing? In addition, a sample screenshot of the obtained and expected result would help us better understand the issue. A better option is to submit a support ticket where you can provide a sample project reproducing the problem.

Once we replicate the issue locally, we would be able to investigate the precise case and assist you further. Thank you in advance.

I am looking forward to your reply.

Regards,
Dess
Telerik by Progress
Telerik UI for WinForms is ready for Visual Studio 2017 RC! Learn more.
0
Martin
Top achievements
Rank 1
Iron
answered on 01 Dec 2016, 09:13 PM
Hi Dess, thanks for the reply.

The code used is a copy of the example:
Private Sub radGridView1_ViewCellFormatting(sender As Object, e As CellFormattingEventArgs)
    Dim cell As GridDetailViewCellElement = TryCast(e.CellElement, GridDetailViewCellElement)
    Dim expanderCell As GridGroupExpanderCellElement = TryCast(e.CellElement, GridGroupExpanderCellElement)
    If expanderCell IsNot Nothing AndAlso TypeOf e.CellElement.RowElement Is GridDataRowElement Then
        Dim hierarchyRow As GridViewHierarchyRowInfo = DirectCast(expanderCell.RowInfo, GridViewHierarchyRowInfo)
        If Not IsExpandable(hierarchyRow) Then
            expanderCell.Expander.Visibility = Telerik.WinControls.ElementVisibility.Hidden
        Else
            expanderCell.Expander.Visibility = Telerik.WinControls.ElementVisibility.Visible
        End If
    ElseIf cell IsNot Nothing Then
        Dim hierarchyRow As GridViewHierarchyRowInfo = DirectCast(DirectCast(cell.RowInfo, GridViewDetailsRowInfo).Owner, GridViewHierarchyRowInfo)
        For i As Integer = 0 To cell.PageViewElement.Items.Count - 1
            Dim item As RadPageViewItem = cell.PageViewElement.Items(i)
            Dim viewInfo As GridViewInfo = hierarchyRow.Views(i)
            item.Text = "Child Template " & i
            If viewInfo.ChildRows.Count = 0 Then
                If i = 0 AndAlso i < cell.PageViewElement.Items.Count - 1 Then
                    cell.PageViewElement.Items(i + 1).IsSelected = True
                End If
                item.Visibility = Telerik.WinControls.ElementVisibility.Collapsed
            Else
                item.Visibility = Telerik.WinControls.ElementVisibility.Visible
            End If
        Next
    End If
End Sub
Private Function IsExpandable(hierarchyRow As GridViewHierarchyRowInfo) As Boolean
    For Each view As GridViewInfo In hierarchyRow.Views
        If view.ChildRows.Count > 0 Then
            Return True
        End If
    Next
    Return False
End Function


I attach a gif image where you can see how RadGrid expands two or more rows when clicking.

 

Thank you very much

Martin.

0
Dess | Tech Support Engineer, Principal
Telerik team
answered on 05 Dec 2016, 08:45 AM
Hello Martin, 

Thank you for writing back. 

I have logged it in our feedback portal and I have added a vote for it on your behalf. You can track its progress, subscribe for status changes and add your comments on the following link - feedback item.

I have also updated your Telerik points.

Currently, the possible solution that I can suggest is to cancel expanding the incorrect row: 

AddHandler Me.RadGridView1.ChildViewExpanding, AddressOf RadGridView1_ChildViewExpanding
AddHandler Me.RadGridView1.MouseDown, AddressOf RadGridView_MouseDown
 
Private Sub RadGridView1_ChildViewExpanding(sender As Object, e As ChildViewExpandingEventArgs)
    If lastClicked IsNot Nothing AndAlso e.ParentRow.Equals(lastClicked) Then
        e.Cancel = False
    Else
        e.Cancel = True
    End If
 
End Sub
 
Dim lastClicked As GridViewRowInfo
 
Private Sub RadGridView_MouseDown(sender As Object, e As MouseEventArgs)
    Dim expander As GridExpanderItem = TryCast(Me.RadGridView1.ElementTree.GetElementAtPoint(e.Location), GridExpanderItem)
    If expander IsNot Nothing Then
        lastClicked = DirectCast(expander.Parent, GridGroupExpanderCellElement).RowInfo
    End If
End Sub

 

I hope this information helps. If you have any additional questions, please let me know. 

Regards,
Dess
Telerik by Progress
Telerik UI for WinForms is ready for Visual Studio 2017 RC! Learn more.
0
Martin
Top achievements
Rank 1
Iron
answered on 05 Dec 2016, 11:50 AM
Hi Dess, thanks for the reply.

Thanks, your code worked perfectly.

Greetings.
Tags
GridView
Asked by
Đạt
Top achievements
Rank 1
Answers by
Dess | Tech Support Engineer, Principal
Telerik team
Đạt
Top achievements
Rank 1
Martin
Top achievements
Rank 1
Iron
Share this question
or