Hello,
There are 3 hierarchical levels in my grid. I use "Load-on-Demand" method to load hierarchical data. Mastertemplate data is binding to a local collection.
My gridview is built basically like this :
Private Sub FrmMain_Load(sender As Object, e As EventArgs)
myGridView.MultiSelect = True
myGridView.AutoSizeColumnsMode = Telerik.WinControls.UI.GridViewAutoSizeColumnsMode.Fill
myGridView.ReadOnly = True
myGridView.AllowRowResize = False
myGridView.MasterTemplate.SelectionMode = GridViewSelectionMode.FullRowSelect
myGridView.UseScrollbarsInHierarchy = True
myGridView.MasterTemplate.ShowChildViewCaptions = True
myGridView.MasterTemplate.ShowRowHeaderColumn = False
Call Load_Hierarchy()
AddHandler myGridView.RowSourceNeeded, AddressOf myGridView_RowSourceNeeded
myBase.Charge()
myGridView.DataSource =myBase
End Sub
Private Sub Load_Hierarchy()
Dim template_FirstLevel As New GridViewTemplate()
template_FirstLevel .Caption = "FirstLevel"
template_FirstLevel .AllowAddNewRow = False
template_FirstLevel .AllowDeleteRow = False
template_FirstLevel .AllowEditRow = False
template_FirstLevel .AllowRowResize = False
template_FirstLevel .AutoGenerateColumns = False
template_FirstLevel .AutoSizeColumnsMode = Telerik.WinControls.UI.GridViewAutoSizeColumnsMode.Fill
template_FirstLevel .ShowChildViewCaptions = True
template_FirstLevel .ShowRowHeaderColumn = False
Dim gCol_1 As GridViewTextBoxColumn = New GridViewTextBoxColumn("Col1")
Dim gCol_2 As GridViewTextBoxColumn = New GridViewTextBoxColumn("Col2")
template_FirstLevel.Columns.AddRange(New GridViewDataColumn() {gCol_1, gCol_2})
myGridView.MasterTemplate.Templates.Add(template_FirstLevel )
template_FirstLevel.HierarchyDataProvider = New GridViewEventDataProvider(template_FirstLevel)
'-------------------definition of Second Level template
Dim template_2ndLevel As New GridViewTemplate()
template_2ndLevel.Caption = "Second Level"
template_2ndLevel.AllowAddNewRow = False
template_2ndLevel.AllowDeleteRow = False
template_2ndLevel.AllowEditRow = False
template_2ndLevel.AutoGenerateColumns = False
template_2ndLevel.AutoSizeColumnsMode = Telerik.WinControls.UI.GridViewAutoSizeColumnsMode.Fill
template_2ndLevel.ShowChildViewCaptions = True
template_2ndLevel.ShowRowHeaderColumn = False
Dim gCol_2nd1 As GridViewTextBoxColumn = New GridViewTextBoxColumn("Index")
Dim gCol_2nd2 As GridViewTextBoxColumn = New GridViewTextBoxColumn("Name")
template_2ndLevel.Columns.AddRange(New GridViewDataColumn() {gCol_2nd1 , gCol_2nd2})
template_FirstLevel.Templates.Add(template_2ndLevel)
template_2ndLevel.HierarchyDataProvider = New GridViewEventDataProvider(template_2ndLevel)
End Sub
Private Sub myGridView_RowSourceNeeded(sender As Object, e As GridViewRowSourceNeededEventArgs)
If e.ParentRow.HierarchyLevel = 0 Then '----First Level data load
Dim Masteritem As C_dbProduit = TryCast(e.ParentRow.DataBoundItem, C_Master)
------Do something to load data in FirstLevelItemsList by using Masteritem-------
For 1stItem fonction In FirstLevelItemsList
Dim row_1stL As GridViewRowInfo = e.Template.Rows.NewRow()
row_1stL.Cells("Col1").Value = 1stItem.data1
row_1stL.Cells("Col2").Value = 1stItem.data2
e.SourceCollection.Add(row_1stL)
Next
End If
If e.ParentRow.HierarchyLevel = 1 Then '----2nd Level data load
Dim 1stItem As C_1stItem = TryCast(e.ParentRow.DataBoundItem, C_1stItem)
Dim masterparentRow As GridViewRowInfo = TryCast(e.ParentRow.Parent, GridViewRowInfo)
Dim masteritem As C_Master = TryCast(parentRow.DataBoundItem, C_Master)
If 1stItem Is Nothing Then '-----------------e.ParentRow.DataBoundItem is always nothing
Exit Sub
End If
If masteritem Is Nothing Then'-----------------e.ParentRow.Parent.DataBoundItem is always Correct!
Exit Sub
End If
'------------Do something to load data in the collection of 2ndItem by using 1stItem-------
End If
End Sub
It works perfect to show mastertemplate and 1st hierarchical level. But when I expand 2nd level, its ParentRow.DataBoundItem (it should be selected 1st level data) is always nothing. But I can get DataBoundItem of e.ParentRow.Parent correctly.
In order to avoid memory overloading, I prefer load-on-demand method in hierarchy grid.
Please help me.
Thank you