Hello,
I have an issue with the PageSize property on a radgrid not being retained when I have detail tables in my grid. Essentially everything works as expected when I remove the detail tables, however if the detail tables are added to the main grid the PageSize property is always set to the default value in the NeedDatasource event. In the PageSizeChanged event I do see that the e.NewPageSize is set to the new page size, but it is not correct in the NeedDatasource. Again if I remove both of the detail tables, the PageSize property works as expected. Thanks.
Template:
Code Behind:
I have an issue with the PageSize property on a radgrid not being retained when I have detail tables in my grid. Essentially everything works as expected when I remove the detail tables, however if the detail tables are added to the main grid the PageSize property is always set to the default value in the NeedDatasource event. In the PageSizeChanged event I do see that the e.NewPageSize is set to the new page size, but it is not correct in the NeedDatasource. Again if I remove both of the detail tables, the PageSize property works as expected. Thanks.
Template:
<telerik:RadAjaxLoadingPanel ID="radLoading" runat="server"> </telerik:RadAjaxLoadingPanel> <telerik:RadWindowManager ID="radWindowManager" runat="server"> </telerik:RadWindowManager> <telerik:RadAjaxManager ID="RadAjaxManager1" runat="server"> <AjaxSettings> <telerik:AjaxSetting AjaxControlID="rgExportTypes"> <UpdatedControls> <telerik:AjaxUpdatedControl ControlID="rgExportTypes" LoadingPanelID="radLoading" /> <telerik:AjaxUpdatedControl ControlID="pnlAlert" /> </UpdatedControls> </telerik:AjaxSetting> </AjaxSettings> </telerik:RadAjaxManager> <asp:Panel ID="pnlAlert" runat="server"> <asp:Label ID="lbMessage" runat="server" CssClass="success" /> </asp:Panel> <telerik:RadGrid ID="rgExportTypes" runat="server" AutoGenerateColumns="False" CellSpacing="0" ShowGroupPanel="true" GridLines="None" AllowPaging="True" AllowCustomPaging="True" AllowFilteringByColumn="True" AllowSorting="True" Width="100%" OnInsertCommand="rgExportTypes_InsertCommand" OnNeedDataSource="rgExportTypes_NeedDataSource" OnUpdateCommand="rgExportTypes_UpdateCommand" OnDetailTableDataBind="rgExportTypes_DetailTableDataBind" OnDeleteCommand="rgExportTypes_DeleteCommand" OnItemDataBound="rgExportTypes_ItemDataBound"> <ClientSettings AllowColumnsReorder="True" ReorderColumnsOnClient="True" AllowDragToGroup="true"> <Selecting CellSelectionMode="None"></Selecting> </ClientSettings> <MasterTableView AllowFilteringByColumn="true" AllowMultiColumnSorting="true" CommandItemDisplay="Top" CommandItemSettings-AddNewRecordText="Add Export Type" Name="ExportType" DataKeyNames="Id"> <CommandItemSettings ExportToPdfText="Export to PDF"></CommandItemSettings> <RowIndicatorColumn Visible="True" FilterControlAltText="Filter RowIndicator column"> <HeaderStyle Width="20px"></HeaderStyle> </RowIndicatorColumn> <ExpandCollapseColumn Visible="True" FilterControlAltText="Filter ExpandColumn column"> <HeaderStyle Width="20px"></HeaderStyle> </ExpandCollapseColumn> <DetailTables> <telerik:GridTableView DataKeyNames="Id" runat="server" CommandItemDisplay="Top" InsertItemPageIndexAction="ShowItemOnCurrentPage" CommandItemSettings-AddNewRecordText="Add Column" HierarchyLoadMode="ServerOnDemand" AllowPaging="False" AllowFilteringByColumn="False" AllowSorting="False" Name="Column" NoDetailRecordsText="No columns associated with this export type."> <Columns> <telerik:GridBoundColumn DataField="ColumnHeader" FilterControlAltText="Filter column1 column" HeaderText="Column Header" UniqueName="ColumnHeader"> </telerik:GridBoundColumn> <telerik:GridNumericColumn DataField="ColumnNumber" FilterControlAltText="Filter column1 column" HeaderText="Column Number" UniqueName="ColumnNumber"> </telerik:GridNumericColumn> <telerik:GridEditCommandColumn ButtonType="ImageButton"> <ItemStyle Width="30px" /> <HeaderStyle Width="30px" /> </telerik:GridEditCommandColumn> </Columns> <EditFormSettings EditFormType="WebUserControl" UserControlName="/controls/forms/ExportTypeColumnForm.ascx"> <EditColumn FilterControlAltText="Filter EditCommandColumn column"> </EditColumn> </EditFormSettings> <DetailTables> <telerik:GridTableView DataKeyNames="Id" runat="server" InsertItemPageIndexAction="ShowItemOnCurrentPage" CommandItemDisplay="Top" HierarchyLoadMode="ServerOnDemand" AllowPaging="False" AllowFilteringByColumn="False" InsertItemDisplay="Bottom" AllowSorting="True" AllowMultiColumnSorting="True" CommandItemSettings-AddNewRecordText="Add Column Values" Name="ColumnValue" NoDetailRecordsText="No values from been associated with this column."> <Columns> <telerik:GridBoundColumn DataField="ColumnName" FilterControlAltText="Filter column1 column" HeaderText="Column Name" UniqueName="ColumnName"> </telerik:GridBoundColumn> <telerik:GridNumericColumn DataField="ColumnValueOrder" FilterControlAltText="Filter column2 column" HeaderText="Column Value Order" UniqueName="ColumnValueOrder"> </telerik:GridNumericColumn> <telerik:GridEditCommandColumn ButtonType="ImageButton"> <ItemStyle Width="60px" /> <HeaderStyle Width="60px" /> </telerik:GridEditCommandColumn> <telerik:GridButtonColumn ConfirmText="Delete Column Value: [[ColumnName]]?" ConfirmDialogType="RadWindow" ConfirmTitle="Delete" ButtonType="ImageButton" CommandName="Delete" ConfirmDialogHeight="100px" ConfirmDialogWidth="300px" UniqueName="DeleteColumn" /> </Columns> <EditFormSettings EditFormType="WebUserControl" UserControlName="/controls/forms/ExportTypeColumnValueForm.ascx"> <EditColumn FilterControlAltText="Filter EditCommandColumn column"> </EditColumn> </EditFormSettings> </telerik:GridTableView> </DetailTables> </telerik:GridTableView> </DetailTables> <Columns> <telerik:GridBoundColumn DataField="Name" FilterControlAltText="Filter column column" HeaderText="Name" UniqueName="Name" FilterControlWidth="250px"> <ItemStyle Width="250px" /> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="ExportFileType" FilterControlAltText="Filter column1 column" HeaderText="ExportFileType" UniqueName="ExportFileType" FilterControlWidth="100px"> <ItemStyle Width="100px" /> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="Product" FilterControlAltText="Filter column2 column" HeaderText="Product" UniqueName="Product" FilterControlWidth="75px"> <ItemStyle Width="75px" /> </telerik:GridBoundColumn> <telerik:GridTemplateColumn DataField="PartnerFormat" FilterControlAltText="Filter TemplateColumn2 column" HeaderText="Patrtner Format" UniqueName="PartnerFormat" FilterControlWidth="30px" SortExpression="PartnerFormat"> <ItemStyle Width="30px" /> <ItemTemplate> <%# GetBool(Eval("PartnerFormat"))%> </ItemTemplate> </telerik:GridTemplateColumn> <telerik:GridTemplateColumn DataField="HasHeaderRow" FilterControlAltText="Filter TemplateColumn3 column" HeaderText="Has Header Row" UniqueName="HasHeaderRow" FilterControlWidth="30px" SortExpression="HasHeaderRow"> <ItemStyle Width="30px" /> <ItemTemplate> <%# GetBool(Eval("HasHeaderRow"))%> </ItemTemplate> </telerik:GridTemplateColumn> <telerik:GridEditCommandColumn ButtonType="ImageButton"> <ItemStyle Width="30px" /> <HeaderStyle Width="30px" /> </telerik:GridEditCommandColumn> </Columns> <EditFormSettings EditFormType="WebUserControl" UserControlName="/controls/forms/ExportTypeForm.ascx"> <EditColumn FilterControlAltText="Filter EditCommandColumn column"> </EditColumn> </EditFormSettings> </MasterTableView> <FilterMenu EnableImageSprites="False"> </FilterMenu> </telerik:RadGrid>Code Behind:
public partial class partners_export_types_default : System.Web.UI.Page{ private static readonly ILog log = LogManager.GetLogger(typeof(partners_export_types_default)); protected void Page_Load(object sender, EventArgs e) { log.Debug("Page_Load"); switch (Request["Type"]) { case "XDates": ltExportHeader.Text = "X-Dates Export Types"; break; default: Response.Redirect("~/"); break; } } protected void rgExportTypes_NeedDataSource(object sender, Telerik.Web.UI.GridNeedDataSourceEventArgs e) { log.Debug("rgExportTypes_NeedDataSource - page size(" + rgExportTypes.PageSize + ")"); int startIndex = rgExportTypes.CurrentPageIndex * rgExportTypes.PageSize; string queryString = @"SELECT VALUE e FROM ColeAdminContext.ExportTypes As e "; if (!string.IsNullOrEmpty(rgExportTypes.MasterTableView.FilterExpression)) { queryString += " where " + rgExportTypes.MasterTableView.FilterExpression.FormatWhereColumns("e", rgExportTypes.MasterTableView.Columns); } ColeAdminContext ctx = new ColeAdminContext(); ObjectQuery<Cole.Admin.Entities.ExportType> exportCount = new ObjectQuery<Cole.Admin.Entities.ExportType>(queryString, ((IObjectContextAdapter)ctx).ObjectContext); rgExportTypes.VirtualItemCount = exportCount.Count(); if (rgExportTypes.MasterTableView.SortExpressions.Count > 0) { queryString += "order by " + rgExportTypes.MasterTableView.SortExpressions.GetSortString().FormatOrderColumns("e", rgExportTypes.MasterTableView.Columns); } else { queryString += "order by e.Name"; } log.Debug("query string(" + queryString + ")"); ObjectQuery<Cole.Admin.Entities.ExportType> exportLists = new ObjectQuery<Cole.Admin.Entities.ExportType>(queryString, ((IObjectContextAdapter)ctx).ObjectContext); rgExportTypes.DataSource = exportLists.Skip(startIndex).Take(rgExportTypes.PageSize).ToList(); } protected void rgExportTypes_InsertCommand(object sender, Telerik.Web.UI.GridCommandEventArgs e) { GridEditableItem editedItem = e.Item as GridEditableItem; UserControl form = (UserControl)e.Item.FindControl(GridEditFormItem.EditFormUserControlID); if (e.Item.OwnerTableView.Name == "ExportType") { Cole.Admin.Entities.ExportType exportType = new Cole.Admin.Entities.ExportType(); exportType.Name = (form.FindControl("txtName") as TextBox).Text; exportType.ExportFileType = (form.FindControl("ddlExportFileType") as DropDownList).SelectedValue; exportType.Product = (form.FindControl("ddlProducts") as DropDownList).SelectedValue; exportType.PartnerFormat = (form.FindControl("cbPartnerFormat") as CheckBox).Checked; exportType.HasHeaderRow = (form.FindControl("cbHasHeaderRow") as CheckBox).Checked; ColeAdminContext ctx = new ColeAdminContext(); ctx.ExportTypes.Add(exportType); AuditEvent ae = AuditEvent.Info(Convert.ToInt32(Page.User.Identity.Name), "Added Export Type"); ctx.AuditEvents.Add(ae); ctx.SaveChanges(); lbMessage.Text = "Successfully Added Export Type: " + exportType.Name; lbMessage.Visible = true; } if (e.Item.OwnerTableView.Name == "Column") { int id = Convert.ToInt32(e.Item.OwnerTableView.ParentItem.GetDataKeyValue("Id")); ExportTypeColumn column = new ExportTypeColumn(); column.ColumnHeader = (form.FindControl("txtColumnHeader") as TextBox).Text; column.ColumnNumber = Convert.ToInt16((form.FindControl("ddlColumnNumber") as DropDownList).SelectedValue); column.ExportTypeId = id; ColeAdminContext ctx = new ColeAdminContext(); foreach (ExportTypeColumn existingColumn in ctx.ExportTypeColumns.Where(c => c.ColumnNumber >= column.ColumnNumber && c.ExportTypeId == id)) { existingColumn.ColumnNumber++; } ctx.ExportTypeColumns.Add(column); AuditEvent ae = AuditEvent.Info(Convert.ToInt32(Page.User.Identity.Name), "Added Column"); ctx.AuditEvents.Add(ae); ctx.SaveChanges(); lbMessage.Text = "Successfully Added Column: " + column.ColumnHeader; lbMessage.Visible = true; } if (e.Item.OwnerTableView.Name == "ColumnValue") { int id = Convert.ToInt32(e.Item.OwnerTableView.ParentItem.GetDataKeyValue("Id")); ExportTypeColumnValue columnValue = new ExportTypeColumnValue(); columnValue.ColumnName = (form.FindControl("ddlColumnName") as DropDownList).SelectedValue; columnValue.ColumnValueOrder = Convert.ToInt16((form.FindControl("ddlColumnValueOrder") as DropDownList).SelectedValue); columnValue.ExportTypeColumnId = id; ColeAdminContext ctx = new ColeAdminContext(); foreach (ExportTypeColumnValue existingColumn in ctx.ExportTypeColumnValues.Where(c => c.ColumnValueOrder >= columnValue.ColumnValueOrder && c.ExportTypeColumnId == id)) { existingColumn.ColumnValueOrder++; } ctx.ExportTypeColumnValues.Add(columnValue); AuditEvent ae = AuditEvent.Info(Convert.ToInt32(Page.User.Identity.Name), "Added Column Value"); ctx.AuditEvents.Add(ae); ctx.SaveChanges(); lbMessage.Text = "Successfully Added Column Value: " + columnValue.ColumnName; lbMessage.Visible = true; } } protected void rgExportTypes_UpdateCommand(object sender, Telerik.Web.UI.GridCommandEventArgs e) { log.Debug("rgExportTypes_UpdateCommand(" + e.Item.OwnerTableView.Name + ")"); GridEditableItem editedItem = e.Item as GridEditableItem; UserControl form = (UserControl)e.Item.FindControl(GridEditFormItem.EditFormUserControlID); if (e.Item.OwnerTableView.Name == "ExportType") { ColeAdminContext ctx = new ColeAdminContext(); int id = Convert.ToInt32(editedItem.OwnerTableView.DataKeyValues[editedItem.ItemIndex]["Id"]); Cole.Admin.Entities.ExportType exportType = ctx.ExportTypes.Where(et => et.Id == id).Single(); exportType.Name = (form.FindControl("txtName") as TextBox).Text; exportType.ExportFileType = (form.FindControl("ddlExportFileType") as DropDownList).SelectedValue; exportType.Product = (form.FindControl("ddlProducts") as DropDownList).SelectedValue; exportType.PartnerFormat = (form.FindControl("cbPartnerFormat") as CheckBox).Checked; exportType.HasHeaderRow = (form.FindControl("cbHasHeaderRow") as CheckBox).Checked; AuditEvent ae = AuditEvent.Info(Convert.ToInt32(Page.User.Identity.Name), "Updated Export Type"); ctx.AuditEvents.Add(ae); ctx.SaveChanges(); lbMessage.Text = "Successfully Updated Export Type: " + exportType.Name; lbMessage.Visible = true; } if (e.Item.OwnerTableView.Name == "Column") { int parentId = Convert.ToInt32(e.Item.OwnerTableView.ParentItem.GetDataKeyValue("Id")); int id = Convert.ToInt32(editedItem.OwnerTableView.DataKeyValues[editedItem.ItemIndex]["Id"]); ColeAdminContext ctx = new ColeAdminContext(); ExportTypeColumn column = ctx.ExportTypeColumns.Where(c => c.Id == id).Single(); int newColumnNumber = Convert.ToInt16((form.FindControl("ddlColumnNumber") as DropDownList).SelectedValue); if (column.ColumnNumber > newColumnNumber) { foreach (ExportTypeColumn existingColumn in ctx.ExportTypeColumns.Where(c => c.ColumnNumber >= newColumnNumber && c.ExportTypeId == parentId)) { existingColumn.ColumnNumber++; } } if (column.ColumnNumber < newColumnNumber) { foreach (ExportTypeColumn existingColumn in ctx.ExportTypeColumns.Where(c => c.ColumnNumber <= newColumnNumber && c.ExportTypeId == parentId)) { existingColumn.ColumnNumber--; } } column.ColumnHeader = (form.FindControl("txtColumnHeader") as TextBox).Text; column.ColumnNumber = (short)newColumnNumber; AuditEvent ae = AuditEvent.Info(Convert.ToInt32(Page.User.Identity.Name), "Added Column"); ctx.AuditEvents.Add(ae); ctx.SaveChanges(); lbMessage.Text = "Successfully Added Column: " + column.ColumnHeader; lbMessage.Visible = true; } if (e.Item.OwnerTableView.Name == "ColumnValue") { ColeAdminContext ctx = new ColeAdminContext(); int parentId = Convert.ToInt32(e.Item.OwnerTableView.ParentItem.GetDataKeyValue("Id")); int id = Convert.ToInt32(editedItem.OwnerTableView.DataKeyValues[editedItem.ItemIndex]["Id"]); ExportTypeColumnValue columnValue = ctx.ExportTypeColumnValues.Where(v => v.Id == id).Single(); int newColumnOrder = Convert.ToInt16((form.FindControl("ddlColumnValueOrder") as DropDownList).SelectedValue); if (columnValue.ColumnValueOrder > newColumnOrder) { foreach (ExportTypeColumnValue existingColumn in ctx.ExportTypeColumnValues.Where(c => c.ColumnValueOrder >= newColumnOrder && c.ExportTypeColumnId == parentId)) { existingColumn.ColumnValueOrder++; } } if (columnValue.ColumnValueOrder < newColumnOrder) { foreach (ExportTypeColumnValue existingColumn in ctx.ExportTypeColumnValues.Where(c => c.ColumnValueOrder <= newColumnOrder && c.ExportTypeColumnId == parentId)) { existingColumn.ColumnValueOrder--; } } columnValue.ColumnName = (form.FindControl("ddlColumnName") as DropDownList).SelectedValue; columnValue.ColumnValueOrder = (short)newColumnOrder; AuditEvent ae = AuditEvent.Info(Convert.ToInt32(Page.User.Identity.Name), "Updated Column Value"); ctx.AuditEvents.Add(ae); ctx.SaveChanges(); lbMessage.Text = "Successfully Updated Column Value: " + columnValue.ColumnName; lbMessage.Visible = true; } } protected void rgExportTypes_DetailTableDataBind(object sender, GridDetailTableDataBindEventArgs e) { log.Debug("rgExportTypes_DetailTableDataBind(" + e.DetailTableView.Name + ")"); GridDataItem parentItem = e.DetailTableView.ParentItem as GridDataItem; if (parentItem.Edit) { return; } if (e.DetailTableView.Name == "Column") { int id = Convert.ToInt32(parentItem.GetDataKeyValue("Id")); ColeAdminContext ctx = new ColeAdminContext(); List<ExportTypeColumn> columns = ctx.ExportTypeColumns.Where(u => u.ExportTypeId == id).OrderBy(c => c.ColumnNumber).ToList(); e.DetailTableView.DataSource = columns; e.DetailTableView.VirtualItemCount = columns.Count; } if (e.DetailTableView.Name == "ColumnValue") { int id = Convert.ToInt32(parentItem.GetDataKeyValue("Id")); ColeAdminContext ctx = new ColeAdminContext(); List<ExportTypeColumnValue> values = ctx.ExportTypeColumnValues.Where(v => v.ExportTypeColumnId == id).OrderBy(c => c.ColumnValueOrder).ToList(); e.DetailTableView.DataSource = values; e.DetailTableView.VirtualItemCount = values.Count; } } protected void rgExportTypes_ItemDataBound(object sender, GridItemEventArgs e) { if (e.Item is GridDataItem) { if (e.Item.DataItem is ExportTypeColumnValue) { ExportTypeColumnValue exportTypeColumn = (ExportTypeColumnValue)e.Item.DataItem; WebControl deleteButton = (WebControl)((GridDataItem)e.Item)["DeleteColumn"].Controls[0]; string clickHandler = deleteButton.Attributes["onclick"]; deleteButton.Attributes["onclick"] = clickHandler.Replace("[[ColumnName]]", exportTypeColumn.ColumnName); } } } protected void rgExportTypes_DeleteCommand(object sender, GridCommandEventArgs e) { if (e.Item.OwnerTableView.Name == "ColumnValue") { GridEditableItem editedItem = e.Item as GridEditableItem; int id = Convert.ToInt32(editedItem.OwnerTableView.DataKeyValues[editedItem.ItemIndex]["Id"]); ColeAdminContext ctx = new ColeAdminContext(); ExportTypeColumnValue exportColumnValue = ctx.ExportTypeColumnValues.Where(r => r.Id == id).Single(); ctx.ExportTypeColumnValues.Remove(exportColumnValue); AuditEvent ae = AuditEvent.Info(Convert.ToInt32(User.Identity.Name), "Remove Column Value"); ctx.AuditEvents.Add(ae); ctx.SaveChanges(); lbMessage.Text = "Successfully Deleted Column Value: " + exportColumnValue.ColumnName; lbMessage.Visible = true; ctx.SaveChanges(); } } protected string GetBool(object boolToFormat) { if (boolToFormat != null) { if ((bool)boolToFormat) { return "<span class='label label-success'>YES</span>"; } else { return "<span class='label label-important'>NO</span>"; } } else { return ""; } } protected void rgExportTypes_PageSizeChanged(object sender, GridPageSizeChangedEventArgs e) { log.Debug("rgExportTypes_PageSizeChanged"); log.Debug("new page size(" + e.NewPageSize + ") page size(" + rgExportTypes.PageSize + ")"); }}