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