This is a migrated thread and some comments may be shown as answers.

DataKeyValues Not Updating Dynamically

1 Answer 204 Views
Ajax
This is a migrated thread and some comments may be shown as answers.
Mark Gallucci
Top achievements
Rank 1
Mark Gallucci asked on 05 Jul 2011, 09:14 PM
I have a web user control that allows the user to run one of several available canned reports from a rad combo box.  I'm able to specify which report to run and specify a few basic criteria when producing the first report.  Afterwards, however, if I select a different report (which programmatically generates the columns in a rad grid and selects the appropriate data source) after returning to the criteria screen I receive this error:

Error: Sys.WebForms.PageRequestManagerServerErrorException: There was a problem extracting DataKeyValues from the DataSource. Please ensure that DataKeyNames are specified correctly and all fields specified exist in the DataSource.

After further investigation, it seems as if the DataKeyValues the grid is expecting "lags" behind because I can keep running the same report with different criteria so long as the report type remains the same.  As soon as I change report types (which use differnet DataKeyValues), the grid does not appear to update with those values (still uses the DataKeyValues from the previous report) and fails.  I'm hoping someone else can shed some light on the situation.  I've provided my interface and server-side code below.

User Control Interface:
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="ReportManager.ascx.cs" Inherits="AZ.SA.RL.App.ProgramManagement.Controls.ReportManager" %>
 
<telerik:RadCodeBlock ID="ControlScripts" runat="server">
<script type="text/javascript">
    function onRequestStart(sender, args) {
        if (args.get_eventTarget().indexOf("ExportToExcelButton") >= 0 ||
                    args.get_eventTarget().indexOf("ExportToWordButton") >= 0 ||
                    args.get_eventTarget().indexOf("ExportToCsvButton") >= 0) {
            args.set_enableAjax(false);
        }
    }
</script>
</telerik:RadCodeBlock>
 
<telerik:RadAjaxManager ID="Report_ScriptManager" runat="server">
    <ClientEvents OnRequestStart="onRequestStart" />
    <AjaxSettings>
        <telerik:AjaxSetting AjaxControlID="Result_Grid">
            <UpdatedControls>
                <telerik:AjaxUpdatedControl ControlID="Result_Grid" />
            </UpdatedControls>
        </telerik:AjaxSetting>
    </AjaxSettings>
</telerik:RadAjaxManager>
 
<telerik:RadAjaxPanel ID="ControlContainer_AjaxPanel" runat="server" CssClass="ContentBlock" Style="width:auto">
    <h3><asp:Label ID="ControlHeader_Label" runat="server" Text="Quick Report" /></h3>
    <asp:ValidationSummary ID="QuickReport_ValidationSummary"
            runat="server"
            ShowMessageBox="false"
            ShowSummary="true"
            ValidationGroup="QuickReportValidation" />        
    <asp:Panel ID="QuickReport_Panel" runat="server" Visible="true">       
        <ul>
            <li>
                <asp:Label ID="QuickReportType_Label" runat="server" AssociatedControlID="QuickReportType_Combobox" Text="Quick Report" />
                <telerik:RadComboBox ID="QuickReportType_Combobox" runat="server" />
            </li>
        </ul>
        <ul>
            <li>
                <asp:Label ID="StartDate_Label" runat="server" AssociatedControlID="QuickReportStartDate_DatePicker" Text="Start Date" />
                <telerik:RadDatePicker ID="QuickReportStartDate_DatePicker" runat="server">
                    <ShowAnimation Type="Fade" Duration="500" />
                    <HideAnimation Type="Fade" Duration="500" />
                </telerik:RadDatePicker>
                <asp:RequiredFieldValidator ID="QuickReportStartDate_RequiredField"
                    runat="server"
                    ControlToValidate="QuickReportStartDate_DatePicker"
                    CssClass="Validator"
                    Display="Dynamic"
                    ErrorMessage="Please specify a start date in the Start Date field."                                
                    SetFocusOnError="true"
                    Text="*"
                    ValidationGroup="QuickReportValidation" />
                <asp:CompareValidator ID="QuickReportStartDate_StartDateBeforeEndDate"
                    runat="server"
                    ControlToValidate="QuickReportStartDate_DatePicker"
                    ControlToCompare="QuickReportEndDate_DatePicker"
                    CssClass="Validator"
                    Display="Dynamic"
                    ErrorMessage="The start date of a report must come before its end date."
                    Operator="LessThanEqual"
                    SetFocusOnError="true"
                    Text="*"
                    Type="Date"
                    ValidationGroup="QuickReportValidation" />                   
            </li>
        </ul>
        <ul>
            <li>
                <asp:Label ID="EndDate_Label" runat="server" AssociatedControlID="QuickReportEndDate_DatePicker" Text="End Date" />
                <telerik:RadDatePicker ID="QuickReportEndDate_DatePicker" runat="server">
                    <ShowAnimation Type="Fade" Duration="500" />
                    <HideAnimation Type="Fade" Duration="500" />
                </telerik:RadDatePicker>
                <asp:RequiredFieldValidator ID="QuickReportEndDate_RequiredField"
                    runat="server"
                    ControlToValidate="QuickReportEndDate_DatePicker"
                    CssClass="Validator"
                    Display="Dynamic"
                    ErrorMessage="Please specify an end date in the Start Date field."                                
                    SetFocusOnError="true"
                    Text="*"
                    ValidationGroup="QuickReportValidation" />
            </li>
        </ul>
        <ul>
            <li>
                <asp:Label ID="Options_Label" runat="server" AssociatedControlID="QuickReportIncludeQuickReport_CheckBoxList" Text="Options" />
                <div class="CheckBoxList">
                    <asp:CheckBoxList ID="QuickReportIncludeQuickReport_CheckBoxList"
                        runat="server"
                        RepeatLayout="UnorderedList">
                        <asp:ListItem Text="Include Quick Plans" Value="0" />
                    </asp:CheckBoxList>
                </div>        
            </li>
        </ul>                               
        <asp:Button ID="RunReport_Button"
            runat="server"
            CausesValidation="true"
            OnClick="RunReport_Button_Click"
            Text="Run Report"            
            ValidationGroup="QuickReportValidation" />
    </asp:Panel>
 
    <asp:Panel ID="CustomReport_Panel" runat="server">   
    </asp:Panel>
 
    <asp:Panel ID="Result_Panel" runat="server" Visible="false">       
        <telerik:RadGrid ID="Result_Grid"
            runat="server"
            ExportSettings-ExportOnlyData="true"
            ExportSettings-OpenInNewWindow="true"
            ExportSettings-IgnorePaging = "true"
            ExportSettings-HideStructureColumns="true"                                                
            OnNeedDataSource="Result_Grid_NeedDataSource"
            OnDetailTableDataBind="Result_Grid_DetailTableDataBind"
            OnGridExporting="Result_Grid_GridExporting"
            OnItemDataBound="Result_Grid_ItemDataBound"                     
            Skin="Black">
            <MasterTableView
                AllowPaging="true"
                AutoGenerateColumns="false"               
                CommandItemDisplay = "Top"
                CommandItemSettings-ShowExportToCsvButton="false"
                CommandItemSettings-ShowExportToExcelButton="true"
                CommandItemSettings-ShowExportToPdfButton="false"
                CommandItemSettings-ShowExportToWordButton="true"
                CommandItemSettings-ShowAddNewRecordButton="false"
                GroupLoadMode="Server"
                Name="ReportResults"                
                HierarchyDefaultExpanded="true"
                HierarchyLoadMode="ServerBind"               
                PagerStyle-AlwaysVisible="true"
                PagerStyle-Mode="NextPrevNumericAndAdvanced"
                PagerStyle-Position="Top"
                PageSize="30"               
                TableLayout="Fixed">
                <DetailTables>
                    <telerik:GridTableView 
                        AutoGenerateColumns="true"                   
                        Name="DetailResults"
                        OnDataBound="Result_DetailGrid_OnDataBound"
                        OnPreRender="Result_DetailGrid_PreRender"
                        BorderStyle="None"                       
                        ShowHeader="false"
                        TableLayout="Fixed">                       
                    </telerik:GridTableView>                   
                </DetailTables>                                
            </MasterTableView>
        </telerik:RadGrid>
    </asp:Panel>   
</telerik:RadAjaxPanel>

Page Interface:
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="ReportView.ascx.cs" Inherits="AZ.SA.RL.App.ProgramManagement.ReportView" %>
<%@ Register Src="~/Controls/ReportManager.ascx" TagName="ReportManager" TagPrefix="pm"  %>
 
<telerik:RadAjaxManagerProxy ID="Program_AjaxManager" runat="server">
    <AjaxSettings>
        <telerik:AjaxSetting AjaxControlID="Report_Toolbar_ButtonClick">
            <UpdatedControls>
                <telerik:AjaxUpdatedControl ControlID="Report_ReportManager" />
            </UpdatedControls>
        </telerik:AjaxSetting>
    </AjaxSettings>
</telerik:RadAjaxManagerProxy>
 
<asp:UpdatePanel ID="Toolbar_AjaxPanel" runat="server" UpdateMode="Conditional">
<ContentTemplate>
    <telerik:RadToolBar ID="Report_Toolbar"
        runat="server"
        Skin="Black"
        BorderStyle="None"
        BorderWidth="0"
        OnButtonClick="Report_Toolbar_ButtonClick"
        Width="100%">
        <Items>           
            <telerik:RadToolBarDropDown Text="New Report" DropDownWidth="150px">
                <Buttons>
                    <telerik:RadToolBarButton Text="Quick Report" CommandName="NEW" Value="Quick" />
                    <telerik:RadToolBarButton Text="Custom Report" CommandName="NEW" Value="Custom" Enabled="false" Visible="false" />
                </Buttons>
            </telerik:RadToolBarDropDown>
            <telerik:RadToolBarButton IsSeparator="true" Value="Sep1" />
            <telerik:RadToolBarButton Text="Criteria" CommandName="CRITERIA" Checked="true" CheckOnClick="true" Group="PlanType" />
            <telerik:RadToolBarButton Text="Results" CommandName="RESULTS" Checked="false" CheckOnClick="true" Group="PlanType" />           
        </Items>   
    </telerik:RadToolBar>
</ContentTemplate>
</asp:UpdatePanel>
 
<asp:UpdatePanel ID="Content_AjaxPanel" runat="server" UpdateMode="Conditional">
<ContentTemplate>
    <div class="ContentContainer">
        <pm:ReportManager ID="Report_ReportManager" runat="server" />
    </div>
</ContentTemplate>
</asp:UpdatePanel>

User Control Code-Behind
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Telerik.Web.UI;
using AZ.SA.RL.App.ProgramManagement.Objects;
using System.ComponentModel;
 
namespace AZ.SA.RL.App.ProgramManagement.Controls
{
    public partial class ReportManager : System.Web.UI.UserControl
    {
        //Enumerators
        #region Enumerators
        public enum QuickReportType
        {
            ByProgrammingCenter = 0,
            ByPrimaryOrganizer = 1,
            ByOutcomes = 2
        }
 
        public enum OpMode
        {
            Quick = 0,
            Custom = 1
        }
 
        public enum DispMode
        {
            Criteria = 0,
            Results = 1
        }
        #endregion
 
        //Properties
        #region Properties
        /// <summary>
        /// Gets or sets the current quick report being run by the manager.
        /// </summary>
        [Browsable(true),
        Category("Function"),
        DefaultValue(QuickReportType.ByProgrammingCenter)]
        public QuickReportType QuickReport
        {
            get
            {
                QuickReportType result = QuickReportType.ByProgrammingCenter;
                if (ViewState["__QUICKREPORT"] != null)
                {
                    result = (QuickReportType)ViewState["__QUICKREPORT"];
                }
 
                return result;
            }
 
            set
            {
                ViewState["__QUICKREPORT"] = value;
            }
        }
         
        /// <summary>
        /// Gets or sets the current operation mode of the manager.
        /// </summary>
        [Browsable(true),
        Category("Function"),
        DefaultValue(OpMode.Quick)]
        public OpMode OperationMode
        {
            get
            {
                OpMode result = OpMode.Quick;
                if (ViewState["__OPERATIONMODE"] != null)
                {
                    result = (OpMode)ViewState["__OPERATIONMODE"];
                }
 
                return result;
            }
 
            set
            {
                ViewState["__OPERATIONMODE"] = value;
            }
        }
 
        /// <summary>
        /// Gets or sets the current display mode of the manager.
        /// </summary>
        [Browsable(true),
        Category("Function"),
        DefaultValue(DispMode.Criteria)]
        public DispMode DisplayMode
        {
            get
            {
                DispMode result = DispMode.Criteria;
                if (ViewState["__DISPLAYMODE"] != null)
                {
                    result = (DispMode)ViewState["__DISPLAYMODE"];
                }
 
                return result;
            }
 
            set
            {
                ViewState["__DISPLAYMODE"] = value;
                //ControlContainer_AjaxPanel.RaisePostBackEvent("__DISPLAYMODECHANGED");
            }
        }
 
        /// <summary>
        /// Sets the title for the manager
        /// </summary>
        [Browsable(true),
        Category("Data"),
        DefaultValue("No Title")]
        public string Title
        {
            private get
            {
                string result = "No Title";
                if (ViewState["__TITLE"] != null)
                {
                    result = (string)ViewState["__TITLE"];
                }
 
                return result;
            }
 
            set
            {
                ViewState["__TITLE"] = value;
            }
        }
 
        /// <summary>
        /// Stores the start datetime for quick report filter
        /// </summary>
        [Browsable(false),
        Category("Data"),
        DefaultValue(null)]
        private DateTime ReportStartDate
        {
            get
            {
                DateTime result = default(DateTime);
                if (ViewState["__STARTDATE"] != null)
                {
                    result = (DateTime)ViewState["__STARTDATE"];
                }
 
                return result;
            }
 
            set
            {
                ViewState["__STARTDATE"] = value;
            }
        }
 
        /// <summary>
        /// Stores the end datetime for quick report filter
        /// </summary>
        [Browsable(false),
        Category("Data"),
        DefaultValue(null)]
        private DateTime ReportEndDate
        {
            get
            {
                DateTime result = default(DateTime);
                if (ViewState["__ENDDATE"] != null)
                {
                    result = (DateTime)ViewState["__ENDDATE"];
                }
 
                return result;
            }
 
            set
            {
                ViewState["__ENDDATE"] = value;
            }
        }
        #endregion
 
        //Methods - Custom
        #region Methods - Custom
        protected void RenderView()
        {
            Label controlHeader = ControlHeader_Label;
            Panel quickReportPanel = QuickReport_Panel;
            Panel customReportPanel = CustomReport_Panel;
            Panel resultPanel = Result_Panel;
 
            switch (DisplayMode)
            {
                case DispMode.Criteria:
                    resultPanel.Visible = false;
 
                    if (OperationMode == OpMode.Quick)
                    {
                        quickReportPanel.Visible = true;
                        customReportPanel.Visible = false;
                    }
                    else if (OperationMode == OpMode.Custom)
                    {
                        quickReportPanel.Visible = false;
                        customReportPanel.Visible = true;
                    }
                    break;
 
                case DispMode.Results:
 
                    if (OperationMode == OpMode.Quick)
                    {
                        resultPanel.Visible = true;
                        quickReportPanel.Visible = false;
                        customReportPanel.Visible = false;
                    }
                    else if (OperationMode == OpMode.Custom)
                    {
 
                    }
                    break;
            }
 
            if (DisplayMode == DispMode.Criteria)
            {
                if (OperationMode == OpMode.Custom)
                {
                    Title = "Custom Report Criteria";
                }
                else
                {
                    Title = "Quick Report Criteria";
                }
            }
 
            //Modify the header to show the current report
            controlHeader.Text = Title;
        }
 
        protected void PopulateQuickReports(object sender)
        
            RadComboBox quickReportList = (RadComboBox)sender;
                         
            foreach (QuickReportType quickReportEnum in Enum.GetValues(typeof(QuickReportType)))
            {
                int value = (int)Enum.Parse(typeof(QuickReportType), quickReportEnum.ToString());
 
                RadComboBoxItem reportItem = new RadComboBoxItem(quickReportEnum.ToString(), value.ToString());
                quickReportList.Items.Add(reportItem);
 
                QuickReportType itemValue = (QuickReportType)value;
 
                switch (itemValue)
                {
                    case QuickReportType.ByProgrammingCenter:
                        reportItem.Text = "By Programming Center";
                        break;
 
                    case QuickReportType.ByPrimaryOrganizer:
                        reportItem.Text = "By Primary Organizer";
                        break;
 
                    case QuickReportType.ByOutcomes:
                        reportItem.Text = "By Primary Goal";
                        break;
                }
            }
        }
 
        protected void RenderReportGrid(object sender, QuickReportType reportType)
        {
            RadGrid reportGrid = (RadGrid)sender;           
            GridBoundColumn boundColumn = null;
 
            reportGrid.MasterTableView.AutoGenerateColumns = false;
            reportGrid.MasterTableView.TableLayout = GridTableLayout.Fixed;
            reportGrid.Columns.Clear();
 
            switch (reportType)
            {
                case QuickReportType.ByProgrammingCenter:
 
                    Title = "Quick Report - Programs by Programming Center (" + ReportStartDate.ToShortDateString() + " - " + ReportEndDate.ToShortDateString() + ")";
                    reportGrid.MasterTableView.ClientDataKeyNames = new string[] { "DepartmentUnitId" };
 
                    if (reportGrid.Columns.Count <= 0)
                    {
                        //Add the Program Name column
                        boundColumn = new GridBoundColumn();
                        reportGrid.Columns.Add(boundColumn);
                        boundColumn.DataField = "UnitName";
                        boundColumn.HeaderText = "Programming Center";
                        boundColumn.UniqueName = "UnitName";
 
                        //Add the Program Name column
                        boundColumn = new GridBoundColumn();
                        reportGrid.Columns.Add(boundColumn);
                        boundColumn.DataField = "UnitShortName";
                        boundColumn.HeaderText = "Unit Short NAme";
                        boundColumn.UniqueName = "UnitShortName";
                        boundColumn.Visible = false;
 
                        //Add the Program Name column
                        boundColumn = new GridBoundColumn();
                        reportGrid.Columns.Add(boundColumn);
                        boundColumn.DataField = "DepartmentUnitId";
                        boundColumn.HeaderText = "DepartmentUnitId";
                        boundColumn.UniqueName = "DepartmentUnitId";
                        boundColumn.Visible = false;
 
                        //Add the Program Count column
                        boundColumn = new GridBoundColumn();
                        reportGrid.Columns.Add(boundColumn);
                        boundColumn.DataField = "ProgramCount";
                        boundColumn.HeaderText = "ProgramCount";
                        boundColumn.UniqueName = "ProgramCount";
                        boundColumn.Visible = false;
                    }
                    break;
 
                case QuickReportType.ByPrimaryOrganizer:
 
                    Title = "Quick Report - Programs by Primary Organizer (" + ReportStartDate.ToShortDateString() + " - " + ReportEndDate.ToShortDateString() + ")";
                    reportGrid.MasterTableView.DataKeyNames = new string[] {"PrimaryOrganizerName","GroupId"};
 
                    if (reportGrid.Columns.Count <= 0)
                    {
                        //Add the Program Name column
                        boundColumn = new GridBoundColumn();
                        reportGrid.Columns.Add(boundColumn);
                        boundColumn.DataField = "PrimaryOrganizerName";
                        boundColumn.HeaderText = "Primary Organizer";
                        boundColumn.UniqueName = "PrimaryOrganizerName";
 
                        //Add the Program Name column
                        boundColumn = new GridBoundColumn();
                        reportGrid.Columns.Add(boundColumn);
                        boundColumn.DataField = "GroupName";
                        boundColumn.HeaderText = "Group Name";
                        boundColumn.UniqueName = "GroupName";
                        boundColumn.Visible = false;
 
                        //Add the Program Name column
                        boundColumn = new GridBoundColumn();
                        reportGrid.Columns.Add(boundColumn);
                        boundColumn.DataField = "GroupId";
                        boundColumn.HeaderText = "GroupId";
                        boundColumn.UniqueName = "GroupId";
                        boundColumn.Visible = false;
 
                        //Add the Program Count column
                        boundColumn = new GridBoundColumn();
                        reportGrid.Columns.Add(boundColumn);
                        boundColumn.DataField = "ProgramCount";
                        boundColumn.HeaderText = "ProgramCount";
                        boundColumn.UniqueName = "ProgramCount";
                        boundColumn.Visible = false;
                    }
                    break;
 
                case QuickReportType.ByOutcomes:
 
                    Title = "Quick Report - Programs by Primary Goal (" + ReportStartDate.ToShortDateString() + " - " + ReportEndDate.ToShortDateString() + ")";
                    reportGrid.MasterTableView.DataKeyNames = new string[] { "BaseOutcomeId" };                   
 
                    if (reportGrid.Columns.Count <= 0)
                    {
                        //Add the Program Name column
                        boundColumn = new GridBoundColumn();
                        reportGrid.Columns.Add(boundColumn);
                        boundColumn.DataField = "PrimaryGoalName";
                        boundColumn.HeaderText = "Primary Goal";
                        boundColumn.UniqueName = "PrimaryGoalName";
 
                        //Add the Base Outcome Id column
                        boundColumn = new GridBoundColumn();
                        reportGrid.Columns.Add(boundColumn);
                        boundColumn.DataField = "BaseOutcomeId";
                        boundColumn.HeaderText = "BaseOutcomeId";
                        boundColumn.UniqueName = "BaseOutcomeId";
                        boundColumn.Visible = false;                       
 
                        //Add the Program Count column
                        boundColumn = new GridBoundColumn();
                        reportGrid.Columns.Add(boundColumn);
                        boundColumn.DataField = "ProgramCount";
                        boundColumn.HeaderText = "ProgramCount";
                        boundColumn.UniqueName = "ProgramCount";
                        boundColumn.Visible = false;
                    }
                    break;
            }
             
            //Set the export file name to the title
            reportGrid.ExportSettings.FileName = Title;
        }
 
        protected void RenderDetailGrid(object sender, QuickReportType reportType)
        {
            //RadGrid reportGrid = (RadGrid)sender;                       
            //GridTableView detailGrid = reportGrid.MasterTableView.DetailTables[0];
 
            GridTableView detailGrid = (GridTableView)sender;           
            GridBoundColumn boundColumn = null;
            GridDateTimeColumn dateColumn = null;
 
            detailGrid.AutoGenerateColumns = false;
            detailGrid.TableLayout = GridTableLayout.Fixed;
 
            switch (reportType)
            {
                case QuickReportType.ByProgrammingCenter:
                     
                     
                    break;
 
                case QuickReportType.ByPrimaryOrganizer:
 
                    if (detailGrid.Columns.Count <= 0)
                    {
                        //Add the Program Name column
                        boundColumn = new GridBoundColumn();
                        detailGrid.Columns.Add(boundColumn);
                        boundColumn.DataField = "ProgramName";
                        boundColumn.HeaderText = "Program Name";
                        boundColumn.UniqueName = "ProgramName";                      
                        //boundColumn.HeaderStyle.Width = Unit.Percentage(30);
                        //boundColumn.ItemStyle.Width = Unit.Percentage(30);
 
                        //Add the Primary Goal column
                        boundColumn = new GridBoundColumn();
                        detailGrid.Columns.Add(boundColumn);
                        boundColumn.DataField = "PrimaryGoalName";
                        boundColumn.HeaderText = "Primary Goal";
                        boundColumn.UniqueName = "PrimaryGoalName";
                        //boundColumn.HeaderStyle.Width = Unit.Percentage(30);
                        //boundColumn.ItemStyle.Width = Unit.Percentage(30);
 
                        //Add the Start Date column                   
                        dateColumn = new GridDateTimeColumn();
                        detailGrid.Columns.Add(dateColumn);
                        dateColumn.DataField = "StartDate";
                        dateColumn.HeaderText = "Start Date";
                        dateColumn.UniqueName = "StartDate";
                        //dateColumn.HeaderStyle.Width = Unit.Percentage(20);
                        //dateColumn.ItemStyle.Width = Unit.Percentage(20);
 
                        //Add the End Date column                   
                        dateColumn = new GridDateTimeColumn();
                        detailGrid.Columns.Add(dateColumn);
                        dateColumn.DataField = "EndDate";
                        dateColumn.HeaderText = "End Date";
                        dateColumn.UniqueName = "EndDate";
                        //dateColumn.HeaderStyle.Width = Unit.Percentage(20);
                        //dateColumn.ItemStyle.Width = Unit.Percentage(20);
                    }
                    break;
                case QuickReportType.ByOutcomes:
 
                    break;
            }
        }
        #endregion
 
        //Methods - Event Handling
        #region Methods - Event Handling                      
        protected void Page_PreRender(object sender, EventArgs e)
        {           
            RadComboBox quickReportList = QuickReportType_Combobox;
 
            if (quickReportList.Items.Count <= 0)
            {
                PopulateQuickReports(quickReportList);
            }
 
            RenderView();
        }
 
        protected void RunReport_Button_Click(object sender, EventArgs e)
        {
            Page.Validate("QuickReportValidation");
 
            if (Page.IsValid)
            {
                RadComboBox quickReportTypeList = QuickReportType_Combobox;
                RadDatePicker startDatePicker = QuickReportStartDate_DatePicker;
                RadDatePicker endDatePicker = QuickReportEndDate_DatePicker;
 
                DateTime startDate = default(DateTime);
                DateTime endDate = default(DateTime);
 
                QuickReportType quickReportType = (QuickReportType)int.Parse(quickReportTypeList.SelectedValue);
 
                if (startDatePicker.SelectedDate.HasValue)
                    startDate = startDatePicker.SelectedDate.Value;
 
                if (endDatePicker.SelectedDate.HasValue)
                    endDate = endDatePicker.SelectedDate.Value;
 
                //Set the quick report type
                QuickReport = quickReportType;
                OperationMode = OpMode.Quick;
                DisplayMode = DispMode.Results;
 
                ReportStartDate = startDate;
                ReportEndDate = endDate;
 
                Result_Grid.Rebind();
            }
        }
 
        protected void Result_Grid_GridExporting(object sender, GridExportingArgs e)
        {
            RadGrid reportGrid = (RadGrid)sender;
 
            switch (e.ExportType)
            {
                case ExportType.Excel:
                    reportGrid.MasterTableView.ExpandCollapseColumn.Visible = false;
                    //reportGrid.MasterTableView.Columns.RemoveAt(0);
                    //reportGrid.MasterTableView.Columns.RemoveAt(0);
                 
                    //reportGrid.MasterTableView.Visible = false;
                    break;
            }
        }
 
        protected void Result_Grid_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)
        {
            RadGrid reportGrid = (RadGrid)sender;
             
            if (!e.IsFromDetailTable)
            {
                switch (QuickReport)
                {
                    case QuickReportType.ByProgrammingCenter:
 
                        reportGrid.DataSource = Report.ProgrammingCenters(ReportStartDate, ReportEndDate, true);
                        RenderReportGrid(reportGrid, QuickReport);
                        break;
 
                    case QuickReportType.ByPrimaryOrganizer:
 
                        reportGrid.DataSource = Report.PrimaryOrganinizers(ReportStartDate, ReportEndDate, true);
                        RenderReportGrid(reportGrid, QuickReport);
                        break;
 
                    case QuickReportType.ByOutcomes:
 
                        reportGrid.DataSource = Report.Outcomes(ReportStartDate, ReportEndDate, true);
                        RenderReportGrid(reportGrid, QuickReport);
                        break;
                }               
            }
        }
 
        protected void Result_Grid_DetailTableDataBind(object sender, GridDetailTableDataBindEventArgs e)
        {
            RadGrid reportGrid = (RadGrid)sender;
            GridTableView detailGrid = (GridTableView)e.DetailTableView;
 
            //RenderDetailGrid(detailGrid, QuickReport);
 
            GridDataItem dataItem = detailGrid.ParentItem;
 
            switch (QuickReport)
            {
                case QuickReportType.ByProgrammingCenter:
 
                    int departmentUnitId = (int)dataItem.GetDataKeyValue("DepartmentUnitId");
 
                    detailGrid.DataSource = Report.ProgramsByProgrammingCenter(departmentUnitId, ReportStartDate, ReportEndDate);
                    break;
 
                case QuickReportType.ByPrimaryOrganizer:
                                
                    string primaryOrganizerName = dataItem.GetDataKeyValue("PrimaryOrganizerName").ToString();
                    int groupId = (int)dataItem.GetDataKeyValue("GroupId");
 
                    detailGrid.DataSource = Report.ProgramsByPrimaryOrganizer(primaryOrganizerName, groupId, ReportStartDate, ReportEndDate);
                    break;
 
                case QuickReportType.ByOutcomes:
 
                    int baseOutcomeId = (int)dataItem.GetDataKeyValue("BaseOutcomeId");
 
                    detailGrid.DataSource = Report.ProgramsByPrimaryOutcome(baseOutcomeId, ReportStartDate, ReportEndDate);
                    break;
            }           
        }
 
        protected void Result_Grid_ItemDataBound(object sender, GridItemEventArgs e)
        {
            if (e.Item is GridDataItem)
            {
                if (e.Item.OwnerTableView.Name == "ReportResults")
                {
                    GridDataItem gridDataItem = (GridDataItem)e.Item;
                    int programCount = 0;
 
                    switch (QuickReport)
                    {
                        case QuickReportType.ByProgrammingCenter:
 
                            string unitName = gridDataItem["UnitName"].Text;
                            programCount = int.Parse(gridDataItem["ProgramCount"].Text);
                             
                            if(programCount == 1)
                                gridDataItem["UnitName"].Text = (unitName + " (" + programCount.ToString() + " Program)").ToUpper();
                            else
                                gridDataItem["UnitName"].Text = (unitName + " (" + programCount.ToString() + " Programs)").ToUpper();
 
                            gridDataItem["UnitName"].Font.Bold = true;
                            gridDataItem["UnitName"].HorizontalAlign = HorizontalAlign.Left;
                            break;
 
                        case QuickReportType.ByPrimaryOrganizer:
                             
                            string organizerName = gridDataItem["PrimaryOrganizerName"].Text.ToString();
                            string groupName = gridDataItem["GroupName"].Text.ToString();
                            programCount = int.Parse(gridDataItem["ProgramCount"].Text);
 
                            if (programCount == 1)
                                gridDataItem["PrimaryOrganizerName"].Text = (groupName + " - " + organizerName + " (" + programCount.ToString() + " Program)").ToUpper();
                            else
                                gridDataItem["PrimaryOrganizerName"].Text = (groupName + " - " + organizerName + " (" + programCount.ToString() + " Programs)").ToUpper();
 
                            gridDataItem["PrimaryOrganizerName"].Font.Bold = true;
                            gridDataItem["PrimaryOrganizerName"].HorizontalAlign = HorizontalAlign.Left;
                            break;
 
                        case QuickReportType.ByOutcomes:
 
                            string outcomeName = gridDataItem["PrimaryGoalName"].Text;
                            programCount = int.Parse(gridDataItem["ProgramCount"].Text);
                             
                            if(programCount == 1)
                                gridDataItem["PrimaryGoalName"].Text = (outcomeName + " (" + programCount.ToString() + " Program)").ToUpper();
                            else
                                gridDataItem["PrimaryGoalName"].Text = (outcomeName + " (" + programCount.ToString() + " Programs)").ToUpper();
 
                            gridDataItem["PrimaryGoalName"].Font.Bold = true;
                            gridDataItem["PrimaryGoalName"].HorizontalAlign = HorizontalAlign.Left;                           
                            break;
                    }                   
                }               
            }
        }
        #endregion
    }
}

Page Code-Behind
using System;
using System.Web.UI.HtmlControls;
using Telerik.Web.UI;
 
namespace AZ.SA.RL.App.ProgramManagement
{
    public partial class ReportView : System.Web.UI.UserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {
 
        }
 
        protected void Report_Toolbar_ButtonClick(object sender, Telerik.Web.UI.RadToolBarEventArgs e)
        {
            //Get clicked button information           
            RadToolBarButton button = (RadToolBarButton)e.Item;
            string command = button.CommandName;
            string value = button.Value;
 
            //Determine which action to take based on the command passed by the clicked toolbar button
            switch (command)
            {
                case "NEW":
 
                    if (value == "Custom")
                    {
                        Report_ReportManager.DisplayMode = ProgramManagement.Controls.ReportManager.DispMode.Criteria;
                        Report_ReportManager.OperationMode = ProgramManagement.Controls.ReportManager.OpMode.Custom;
                    }
                    else
                    {
                        Report_ReportManager.DisplayMode = ProgramManagement.Controls.ReportManager.DispMode.Criteria;
                        Report_ReportManager.OperationMode = ProgramManagement.Controls.ReportManager.OpMode.Quick;
                    }
                    break;
            }
 
            //Update the program content ajax panel
            Content_AjaxPanel.Update();
        }
    }
}

Thanks in advance.

1 Answer, 1 is accepted

Sort by
0
Tsvetina
Telerik team
answered on 08 Jul 2011, 01:27 PM
Hi Mark,

Grid columns can be created dynamically only on Page_Init and Page_Load events. This is discussed in the following help article:
Programmatic creation

You could also want to check this as well - if you are changing the number of columns upon postback:
Changing the grid structure dynamically on postback

Best wishes,
Tsvetina
the Telerik team

Register for the Q2 2011 What's New Webinar Week. Mark your calendar for the week starting July 18th and book your seat for a walk through of all the exciting stuff we will ship with the new release!

Tags
Ajax
Asked by
Mark Gallucci
Top achievements
Rank 1
Answers by
Tsvetina
Telerik team
Share this question
or