Hi,
I need to build a dynamic grid with n-levels hierarchy. Also I need to define n-columns depending of the table the user expanded. To do this, I have 3 object-datasource an a placeholder to programmatically define the radgrid and the detailsgrids asociated. The problem is that when I want to access to the 2nd level (the 1st one is ok), the #grdEntity_DetailTableDataBind event dont fire.
aspx
vb
I need to build a dynamic grid with n-levels hierarchy. Also I need to define n-columns depending of the table the user expanded. To do this, I have 3 object-datasource an a placeholder to programmatically define the radgrid and the detailsgrids asociated. The problem is that when I want to access to the 2nd level (the 1st one is ok), the #grdEntity_DetailTableDataBind event dont fire.
aspx
<telerik:RadScriptManager ID="RadScriptManager1" runat="server" />
<!-- Only for master table - level 0 --> <asp:ObjectDataSource ID="odsCustomerEntities" runat="server" SelectMethod="GetCustomerEntitiesRows" TypeName="EKSClientLibrary.Ecl.clsEclKernelClient" EnablePaging="True" MaximumRowsParameterName="RowCount" StartRowIndexParameterName="StartingRow"> <SelectParameters> <asp:Parameter Name="StartingRow" Type="Int32" DefaultValue="1" /> <asp:Parameter Name="RowCount" Type="Int32" DefaultValue="25" /> <asp:Parameter Name="pCustPkey" Type="String" DefaultValue="" /> </SelectParameters> </asp:ObjectDataSource> <!-- For header tables -> Level 1 - 3 - n -->
<asp:ObjectDataSource ID="odsEntities" runat="server" SelectMethod="GetEntitiesRows" TypeName="EKSClientLibrary.Ecl.clsEclKernelClient" EnablePaging="True" MaximumRowsParameterName="RowCount" StartRowIndexParameterName="StartingRow"> <SelectParameters> <asp:Parameter Name="StartingRow" Type="Int32" DefaultValue="1" /> <asp:Parameter Name="RowCount" Type="Int32" DefaultValue="25" /> <asp:Parameter Name="pParentPkey" Type="String" DefaultValue="" /> </SelectParameters> </asp:ObjectDataSource>
<!-- For detail tables -> Level 2 - 4 - n -->
<asp:ObjectDataSource ID="odsEntitiesDetails" runat="server" SelectMethod="GetEntitiesDetailsRows"
TypeName="EKSClientLibrary.Ecl.clsEclKernelClient" EnablePaging="True" MaximumRowsParameterName="RowCount"
StartRowIndexParameterName="StartingRow">
<SelectParameters>
<asp:Parameter Name="StartingRow" Type="Int32" DefaultValue="1" />
<asp:Parameter Name="RowCount" Type="Int32" DefaultValue="25" />
<asp:Parameter Name="pPkey" Type="String" DefaultValue="" />
<asp:Parameter Name="pParentPkey" Type="String" DefaultValue="" />
<asp:Parameter Name="pRelatedTable" Type="String" DefaultValue="" />
</SelectParameters>
</asp:ObjectDataSource>
<telerik:RadAjaxManager ID="RadAjaxManager1" runat="server"> <AjaxSettings> <telerik:AjaxSetting AjaxControlID="PlaceHolder1"> <UpdatedControls> <telerik:AjaxUpdatedControl ControlID="PlaceHolder1" /> </UpdatedControls> </telerik:AjaxSetting> </AjaxSettings> </telerik:RadAjaxManager> <asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>vb
Private Sub DefineGridStructure() 'Definicion global grdEntity = New RadGrid Dim column1 As GridBoundColumn 'Nivel 0 With grdEntity .DataSourceID = "odsCustomerEntities" .ID = "grdEntity" .Width = Unit.Percentage(100) .PageSize = 5 .AllowPaging = True .PagerStyle.Mode = GridPagerMode.NextPrevAndNumeric 'Columnas .AutoGenerateColumns = False column1 = New GridBoundColumn column1.DataField = "C03" column1.HeaderText = "Entidad" .MasterTableView.Columns.Add(column1) .GroupingEnabled = False .ShowGroupPanel = False .ShowStatusBar = True .ClientSettings.AllowDragToGroup = False .MasterTableView.PageSize = 15 .MasterTableView.DataKeyNames = New String(2) {"Pkey", "ParentPkey", "RelatedTable"} .MasterTableView.EnableViewState = True '.MasterTableView.HierarchyLoadMode = GridChildLoadMode.ServerOnDemand End With 'Nivel 1 Dim view1 = New GridTableView(grdEntity) view1.Name = "EntityDetails" view1.EnableViewState = True grdEntity.MasterTableView.DetailTables.Add(view1) 'Add grid to place holder Me.PlaceHolder1.Controls.Add(grdEntity) End Sub Private Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init mCustomerPkey = "" DefineGridStructure() End Sub Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load mCustomerPkey = Request.QueryString("CustPkey") Dim grid As RadGrid = CType(PlaceHolder1.FindControl("grdEntity"), RadGrid) RadAjaxManager1.AjaxSettings.AddAjaxSetting(grid, grid) End Sub Public Sub odsCustomerEntities_Selecting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.ObjectDataSourceSelectingEventArgs) Handles odsCustomerEntities.Selecting With e.InputParameters .Item("pCustPkey") = mCustomerPkey End With End Sub Private Sub grdEntity_DetailTableDataBind(ByVal source As Object, ByVal e As Telerik.Web.UI.GridDetailTableDataBindEventArgs) Handles grdEntity.DetailTableDataBind Debug.Print("grdEntity_DetailTableDataBind") Dim dataItem As GridDataItem = CType(e.DetailTableView.ParentItem, GridDataItem) Select Case e.DetailTableView.Name Case "EntityDetails" Dim relationFields As GridRelationFields Dim wPkey As String = dataItem.GetDataKeyValue("Pkey").ToString() Dim wParentPkey As String = dataItem.GetDataKeyValue("ParentPkey").ToString() Dim wRelatedTable As String = dataItem.GetDataKeyValue("RelatedTable").ToString() With e.DetailTableView .DataSourceID = "odsEntitiesDetails" .DataKeyNames = New String(2) {"Pkey", "ParentPkey", "RelatedTable"} .Width = Unit.Percentage(100) 'Columnas '.AutoGenerateColumns = True Dim wColumn As GridBoundColumn wColumn = New GridBoundColumn wColumn.DataField = "Pkey" wColumn.HeaderText = "Pkey" .Columns.Add(wColumn) wColumn = New GridBoundColumn wColumn.DataField = "ParentPkey" wColumn.HeaderText = "ParentPkey" .Columns.Add(wColumn) wColumn = New GridBoundColumn wColumn.DataField = "RelatedTable" wColumn.HeaderText = "RelatedTable" .Columns.Add(wColumn) Dim wEntityColumns As EntityColumnType() wEntityColumns = GetEksClientInstance.GetEntitiesDetailsColumns(GetTicket(), wPkey, wRelatedTable) For i = 0 To wEntityColumns.GetLength(0) - 1 wColumn = New GridBoundColumn 'wColumn.DataField = wEntityColumns(i).Code wColumn.DataField = "C0" & i.ToString.Trim wColumn.HeaderText = wEntityColumns(i).Description .Columns.Add(wColumn) Next 'Relaciones relationFields = New GridRelationFields() relationFields.MasterKeyField = "Pkey" relationFields.DetailKeyField = "pPkey" .ParentTableRelation.Add(relationFields) relationFields = New GridRelationFields() relationFields.MasterKeyField = "ParentPkey" relationFields.DetailKeyField = "pParentPkey" .ParentTableRelation.Add(relationFields) relationFields = New GridRelationFields() relationFields.MasterKeyField = "RelatedTable" relationFields.DetailKeyField = "pRelatedTable" .ParentTableRelation.Add(relationFields) 'Nivel 2 Dim view2 = New GridTableView(grdEntity) view2.Name = "Entity" view2.EnableViewState = True .DetailTables.Add(view2) End With Case "Entity" Dim relationFields As GridRelationFields Dim wPkey As String = dataItem.GetDataKeyValue("Pkey").ToString() Dim wParentPkey As String = dataItem.GetDataKeyValue("ParentPkey").ToString() Dim wRelatedTable As String = dataItem.GetDataKeyValue("RelatedTable").ToString() With e.DetailTableView .DataSourceID = "odsEntities" .Width = Unit.Percentage(100) .DataKeyNames = New String(2) {"Pkey", "ParentPkey", "RelatedTable"} 'Columnas Dim column1 = New GridBoundColumn column1.DataField = "C03" column1.HeaderText = "Entidad" .Columns.Add(column1) 'Relaciones relationFields = New GridRelationFields() relationFields.MasterKeyField = "Pkey" relationFields.DetailKeyField = "pPkey" .ParentTableRelation.Add(relationFields) relationFields = New GridRelationFields() relationFields.MasterKeyField = "ParentPkey" relationFields.DetailKeyField = "pParentPkey" .ParentTableRelation.Add(relationFields) relationFields = New GridRelationFields() relationFields.MasterKeyField = "RelatedTable" relationFields.DetailKeyField = "pRelatedTable" .ParentTableRelation.Add(relationFields) 'Nivel 1 Dim view1 = New GridTableView(grdEntity) view1.Name = "EntityDetails" view1.EnableViewState = True .DetailTables.Add(view1) End With End Select End Sub