DataKeyValues Not Updating Dynamically

2 posts, 0 answers
  1. Mark Gallucci
    Mark Gallucci avatar
    11 posts
    Member since:
    May 2010

    Posted 05 Jul 2011 Link to this post

    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.
  2. Tsvetina
    Admin
    Tsvetina avatar
    1876 posts

    Posted 08 Jul 2011 Link to this post

    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!

  3. UI for ASP.NET Ajax is Ready for VS 2017
Back to Top