I'm creating a grid dynamically based on filters the user provides. The issue(s) I'm having are:
Here's my aspx:
And here is my code behind:
What am I doing wrong here?
Thanks,
Mark
- The column filters no longer work. That is, selecting "Contains" or "StartsWith" doesn't work.
- When going to page 2 of the grid, all records are returned (looks like the grid is rebinding and is bringing back every record in the db instead of filters the dataset that's already contained in the grid)
Here's my aspx:
<%@ Page Language="C#" MasterPageFile="~/MasterPages/RADMasterPage.master" AutoEventWireup="true" CodeFile="Report.aspx.cs" Inherits="Reporting_Report" Title="Untitled Page" %><%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %><%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="ajaxtoolkit" %><%@ Register src="../Controls/ReportFilters.ascx" tagname="ReportFilters" tagprefix="RF" %><asp:Content ID="Content1" ContentPlaceHolderID="head" runat="Server"> <script type="text/javascript"> function requestStart(sender, args) { if (args.get_eventTarget().indexOf("ExportToExcelButton") >= 0) { args.set_enableAjax(false); } } </script></asp:Content><asp:Content ID="SectionHeader" ContentPlaceHolderID="cphSectionHeader" runat="server"> <h3>Reporting</h3></asp:Content><asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server"> <div> <telerik:RadPanelBar ID="rpbFilters" Runat="server" Skin="Office2007" Width="100%" onitemclick="rpbFilters_ItemClick"> <CollapseAnimation Type="Linear" Duration="200" /> <ExpandAnimation Type="Linear" Duration="200" /> <Items> <telerik:RadPanelItem Text="Report Filters" Expanded="true"> <Items> <telerik:RadPanelItem Value="filters" runat="server"> <ItemTemplate> <div> <RF:ReportFilters ID="rfFilters" runat="server" /> <asp:Button ID="btnRunReport" runat="server" Text="Run Report" OnClick="RunReport" /> </div> </ItemTemplate> </telerik:RadPanelItem> </Items> </telerik:RadPanelItem> </Items> </telerik:RadPanelBar> </div> <asp:Panel ID="pnlGrid" runat="server" Visible="false"> <div id="wrapper"> <telerik:radajaxmanager id="ramReport" runat="server"> <AjaxSettings> <telerik:AjaxSetting AjaxControlID="rgReport"> <UpdatedControls> <telerik:AjaxUpdatedControl ControlID="rgReport" LoadingPanelID="ralpReport" /> </UpdatedControls> </telerik:AjaxSetting> </AjaxSettings> </telerik:radajaxmanager> <telerik:radajaxloadingpanel enabled="true" id="ralpReport" issticky="false" runat="server" skin="" transparency="50"> <img id="imgLoader" src="../Images/loading3.gif" alt="Loading..." /> </telerik:radajaxloadingpanel> <telerik:radajaxpanel clientevents-onrequeststart="requestStart" id="rapReport" loadingpanelid="ralpReport" runat="server"> <telerik:RadGrid AllowFilteringByColumn="False" AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False" DataSourceID="odsReports" EnableViewState="false" GridLines="None" ID="rgReport" OnExcelMLExportRowCreated="RadGrid1_ExcelMLExportRowCreated" OnExcelMLExportStylesCreated="RadGrid1_ExcelMLExportStylesCreated" runat="server" ShowFooter="True" ShowGroupPanel="True"> <ClientSettings AllowColumnsReorder="true" AllowDragToGroup="true" ReorderColumnsOnClient="true"> <Scrolling AllowScroll="True" UseStaticHeaders="True" SaveScrollPosition="True" /> </ClientSettings> <ExportSettings ExportOnlyData="true" IgnorePaging="true" OpenInNewWindow="true"> <Excel Format="ExcelML" /> </ExportSettings> <FilterMenu EnableImageSprites="False" /> <GroupingSettings CaseSensitive="false" ShowUnGroupButton="true" /> <HeaderContextMenu CssClass="GridContextMenu GridContextMenu_Default" /> <PagerStyle Mode="NextPrevNumericAndAdvanced" /> </telerik:RadGrid> </telerik:radajaxpanel> </div> <asp:ObjectDataSource ID="odsReports" runat="server" SelectMethod="GetReportResults" TypeName="Budco.StoreFront.Reporting.BLL.ReportResultset" OnObjectCreating="ObjectCreating"> </asp:ObjectDataSource> </asp:Panel></asp:Content>And here is my code behind:
using System;using System.Data;using System.Web.UI;using Telerik.Web.UI;using Budco.StoreFront.Reporting;using Budco.StoreFront.Reporting.BLL;using Budco.StoreFront.Common;using Telerik.Web.UI.GridExcelBuilder;using System.Web.UI.WebControls;public partial class Reporting_Report : System.Web.UI.Page{ bool isConfigured = false; int filterDelay; int? _ReportID = null; string _ReportName = null; ReportResultset _ReportResultset = null; int? _ReportResultsID = null; protected void Page_Load(object sender, EventArgs e) { object oReportID = Request["ReportID"]; object oReportName = Request["ReportName"]; object oReportResultsID = Request["ReportResultsID"]; if (oReportID != null) { _ReportID = Convert.ToInt32(oReportID); _ReportResultset = new ReportResultset((int)_ReportID); } if (_ReportID == null && oReportName != null) { _ReportName = oReportName.ToString(); _ReportResultset = new ReportResultset(_ReportName); } if (oReportResultsID != null) { _ReportResultsID = Convert.ToInt32(oReportResultsID); } //if (!Page.IsPostBack) //{ if (_ReportID != null || _ReportName != null) { GetParameterAttributes paramAttributes = new GetParameterAttributes(); Reporting.GetParameterAttributesDataTable paramAttributesDT = paramAttributes.GetData(_ReportID); ASP.controls_reportfilters_ascx ctrl = (ASP.controls_reportfilters_ascx)rpbFilters.FindItemByValue("filters").FindControl("rfFilters"); ctrl.BindControls(paramAttributesDT); } //} if (_ReportID != null || _ReportName != null) { //this.btnRunReport.Enabled = false; } } protected void RadGrid1_ExcelMLExportRowCreated(object source, GridExportExcelMLRowCreatedArgs e) { if (e.RowType == GridExportExcelMLRowType.DataRow) { //CellElement cell = e.Row.Cells.GetCellByName("Price"); //cell.StyleValue = cell.StyleValue == "itemStyle" ? "priceItemStyle" : "alternatingPriceItemStyle"; } if (e.RowType == Telerik.Web.UI.GridExcelBuilder.GridExportExcelMLRowType.HeaderRow) { e.Worksheet.WorksheetOptions.PageSetup.PageHeaderElement.Data = "This is the header"; e.Worksheet.WorksheetOptions.PageSetup.PageHeaderElement.Margin = 0.25; e.Worksheet.WorksheetOptions.PageSetup.PageFooterElement.Data = "This is the footer"; e.Worksheet.WorksheetOptions.PageSetup.PageFooterElement.Margin = 0.25; } if (!isConfigured) { e.Worksheet.Name = "Test Agent Report"; PageSetupElement pageSetup = e.Worksheet.WorksheetOptions.PageSetup; pageSetup.PageLayoutElement.IsCenteredVertical = true; pageSetup.PageLayoutElement.IsCenteredHorizontal = true; pageSetup.PageMarginsElement.Left = 0.75; pageSetup.PageMarginsElement.Top = 0.5; pageSetup.PageMarginsElement.Right = 0.5; pageSetup.PageMarginsElement.Bottom = 0.75; pageSetup.PageLayoutElement.PageOrientation = PageOrientationType.Landscape; e.Worksheet.WorksheetOptions.AllowFreezePanes = true; e.Worksheet.WorksheetOptions.LeftColumnRightPaneNumber = 1; e.Worksheet.WorksheetOptions.TopRowBottomPaneNumber = 1; e.Worksheet.WorksheetOptions.SplitHorizontalOffset = 1; e.Worksheet.WorksheetOptions.SplitVerticalOffest = 1; e.Worksheet.WorksheetOptions.ActivePane = 2; isConfigured = true; } } protected void RadGrid1_ExcelMLExportStylesCreated(object source, GridExportExcelMLStyleCreatedArgs e) { StyleElement priceStyle = new StyleElement("priceItemStyle"); priceStyle.NumberFormat.FormatType = NumberFormatType.Currency; priceStyle.FontStyle.Color = System.Drawing.Color.Red; e.Styles.Add(priceStyle); StyleElement alternatingPriceStyle = new StyleElement("alternatingPriceItemStyle"); alternatingPriceStyle.NumberFormat.FormatType = NumberFormatType.Currency; alternatingPriceStyle.FontStyle.Color = System.Drawing.Color.Red; e.Styles.Add(alternatingPriceStyle); foreach (StyleElement style in e.Styles) { switch (style.Id) { case "itemStyle": style.FontStyle.Color = System.Drawing.Color.Green; break; } } } protected void RunReport(object sender, EventArgs e) { if (_ReportID != null || _ReportName != null) { ASP.controls_reportfilters_ascx ctrl = (ASP.controls_reportfilters_ascx)rpbFilters.FindItemByValue("filters").FindControl("rfFilters"); Panel pnl = (Panel)ctrl.FindControl("pnlFilters"); if (pnl.HasControls()) { //GetParameterAttributes paramAttributes = new GetParameterAttributes(); //Reporting.GetParameterAttributesDataTable paramAttributesDT = paramAttributes.GetData(_ReportID); _ReportResultset.ParameterValues.Clear(); foreach (Control control in pnl.Controls) { string theControl = control.GetType().ToString(); switch (control.GetType().ToString()) { case "System.Web.UI.WebControls.TextBox": _ReportResultset.ParameterValues.Add(new Budco.StoreFront.Common.Parameter(control.ID.Substring(3), ((TextBox)control).Text)); break; } } } // Get ReportResults & ReportResultsColumn data ReportResults rptResults = new ReportResults(); //ReportResultsColumn rptResultsColumn = new ReportResultsColumn(); GetReportResultsColumns rptResultsColumn = new GetReportResultsColumns(); Reporting.ReportResultsDataTable resultsDT = rptResults.GetData(this._ReportResultsID, _ReportID); Reporting.GetReportResultsColumnsDataTable resultsColumnDT = rptResultsColumn.GetData(null, resultsDT.Rows[0]["ResultsName"].ToString()); // Set RadGrid level properties rgReport.Skin = "Office2007"; //resultsDT.Rows[0]["Skin"].ToString(); rgReport.HeaderStyle.CssClass = resultsDT.Rows[0]["HeaderStyleCssClass"].ToString(); rgReport.ItemStyle.CssClass = resultsDT.Rows[0]["ItemStyleCssClass"].ToString(); rgReport.FooterStyle.CssClass = resultsDT.Rows[0]["FooterStyleCssClass"].ToString(); // Set MasterTableView level properties rgReport.MasterTableView.CommandItemSettings.ShowExportToCsvButton = (bool)resultsDT.Rows[0]["ShowExportToCsvButton"]; rgReport.MasterTableView.CommandItemSettings.ShowExportToExcelButton = (bool)resultsDT.Rows[0]["ShowExportToExcelButton"]; rgReport.MasterTableView.CommandItemSettings.ShowAddNewRecordButton = false; rgReport.MasterTableView.AllowFilteringByColumn = true; rgReport.MasterTableView.AutoGenerateColumns = false; rgReport.MasterTableView.CommandItemDisplay = GridCommandItemDisplay.TopAndBottom; rgReport.MasterTableView.ShowFooter = true; rgReport.MasterTableView.TableLayout = GridTableLayout.Auto; this.rgReport.MasterTableView.Columns.Clear(); // this prevents duplicate columns which causes an error foreach (DataRow row in resultsColumnDT.Rows) { switch (row["ColumnTypeName"].ToString()) { case "Telerik.Web.UI.GridBoundColumn": GridBoundColumn boundColumn = new GridBoundColumn(); this.rgReport.MasterTableView.Columns.Add(boundColumn); boundColumn.AllowFiltering = (bool)row["AllowFiltering"]; boundColumn.AllowSorting = (bool)row["AllowSorting"]; boundColumn.AutoPostBackOnFilter = (bool)row["AutoPostBackOnFilter"]; boundColumn.DataField = row["DataField"].ToString(); boundColumn.DataFormatString = row["DataFormatString"].ToString(); boundColumn.FilterControlAltText = row["FilterControlAltText"].ToString(); bool result = Int32.TryParse(row["FilterDelay"].ToString(), out filterDelay); boundColumn.FilterDelay = filterDelay; boundColumn.HeaderText = row["HeaderText"].ToString(); boundColumn.SortExpression = row["DataField"].ToString(); boundColumn.UniqueName = row["DataField"].ToString(); break; case "Telerik.Web.UI.GridDateTimeColumn": GridDateTimeColumn dateTimeColumn = new GridDateTimeColumn(); this.rgReport.MasterTableView.Columns.Add(dateTimeColumn); dateTimeColumn.AllowFiltering = (bool)row["AllowFiltering"]; dateTimeColumn.AllowSorting = (bool)row["AllowSorting"]; dateTimeColumn.AutoPostBackOnFilter = (bool)row["AutoPostBackOnFilter"]; dateTimeColumn.DataField = row["DataField"].ToString(); dateTimeColumn.DataFormatString = row["DataFormatString"].ToString(); dateTimeColumn.DataType = System.Type.GetType(row["DataType"].ToString()); dateTimeColumn.FilterControlAltText = row["FilterControlAltText"].ToString(); bool result2 = Int32.TryParse(row["FilterDelay"].ToString(), out filterDelay); dateTimeColumn.FilterDelay = filterDelay; dateTimeColumn.HeaderText = row["HeaderText"].ToString(); dateTimeColumn.PickerType = GridDateTimeColumnPickerType.DatePicker; dateTimeColumn.SortExpression = row["DataField"].ToString(); dateTimeColumn.UniqueName = row["DataField"].ToString(); break; case "Telerik.Web.UI.GridNumericColumn": GridNumericColumn numericColumn = new GridNumericColumn(); this.rgReport.MasterTableView.Columns.Add(numericColumn); foreach (GridAggregateFunction gaf in Enum.GetValues(typeof(GridAggregateFunction))) { if (gaf.ToString().Equals(row["Aggregate"].ToString())) { numericColumn.Aggregate = gaf; break; } } numericColumn.AllowFiltering = (bool)row["AllowFiltering"]; numericColumn.AllowSorting = (bool)row["AllowSorting"]; numericColumn.AutoPostBackOnFilter = (bool)row["AutoPostBackOnFilter"]; numericColumn.DataField = row["DataField"].ToString(); numericColumn.DataFormatString = row["DataFormatString"].ToString(); numericColumn.DataType = System.Type.GetType(row["DataType"].ToString()); numericColumn.FilterControlAltText = row["FilterControlAltText"].ToString(); bool result3 = Int32.TryParse(row["FilterDelay"].ToString(), out filterDelay); numericColumn.FilterDelay = filterDelay; numericColumn.FooterAggregateFormatString = row["FooterAggregateFormatString"].ToString(); numericColumn.HeaderText = row["HeaderText"].ToString(); numericColumn.SortExpression = row["DataField"].ToString(); numericColumn.UniqueName = row["DataField"].ToString(); break; default: break; } } rgReport.Rebind(); // this causes the grid to bring back every record from the db. pnlGrid.Visible = true; } } protected void rpbFilters_ItemClick(object sender, RadPanelBarEventArgs e) { } protected void ObjectCreating(object sender, ObjectDataSourceEventArgs e) { if (_ReportID != null || _ReportName != null) { //_ReportResultset = new ReportResultset((int)_ReportID); e.ObjectInstance = _ReportResultset; } }}What am I doing wrong here?
Thanks,
Mark