更新报表查看器的数据源中的参数ASP.NET C#

时间:2013-08-26 00:40:19

标签: c# asp.net sql-server stored-procedures reporting-services

我有以下控件:数据源,报表查看器和两个Telerik RadDateTimePicker。 我的Rad Controls看起来像的屏幕截图。

Rad Controls

我的报告是客户报告定义(.rdlc)。我在SQL 2008数据库中有一个存储过程,用于报告和数据源。

我通过GUI IDE使用Rad Control的参数源配置存储过程,而不是使用代码。屏幕截图:

DS Config

以下是数据源的ASP代码:

<asp:SqlDataSource ID="DataSourceViewWeeklySummary" runat="server" 
    ConnectionString="<%$ ConnectionStrings:SERVER %>" 
    SelectCommand="ProcedureWeeklySummary" SelectCommandType="StoredProcedure">
    <SelectParameters>
        <asp:ControlParameter ControlID="DTimePickerStartDate" Name="startDate" 
            PropertyName="SelectedDate" Type="DateTime" />
        <asp:ControlParameter ControlID="DTimePickerEndDate" DefaultValue="" 
            Name="endDate" PropertyName="SelectedDate" Type="DateTime" />
    </SelectParameters>
</asp:SqlDataSource>

我想在代码中,能够用我的两个日期和时间选择器更新我的数据源的参数。然后刷新报表查看器以更新报表。有人能指出我正确的方向,以便我可以用尽可能少的代码实现这一目标吗?在此先感谢您的帮助。如果我能列出更多信息,请告诉我。

1 个答案:

答案 0 :(得分:1)

在DTP控件的SelectedDateChanged事件中,您需要执行以下操作:StartDateVariable = e.NewDate

然后,在报告的ReportRefresh事件中,您需要更新以下参数:DataSource.SelectParameters[0].DefaultValue = StartDateVariable;

请确保在离开DataBind()事件之前致电ReportRefresh(除非您在其他地方处理此事件。

此外,您可能需要进行某些类型的转换/转换。如果我没弄错,DefaultValue属性是一个字符串,那么您需要将变量转换为字符串,或将新日期转换为字符串。

以下是一个“完整”的例子。

        protected void DTimePickerStartDate_SelectedDateChanged(object sender, Telerik.Web.UI.Calendar.SelectedDateChangedEventArgs e)
    {
        StartDate = Convert.ToString(e.NewDate);
    }

    protected void DTimePickerEndDate_SelectedDateChanged(object sender, Telerik.Web.UI.Calendar.SelectedDateChangedEventArgs e)
    {
        EndDate = Convert.ToString(e.NewDate);
    }

    protected void ReportViewer1_ReportRefresh(object sender, System.ComponentModel.CancelEventArgs e)
    {
        DataSourceViewWeeklySummary.SelectParameters[0].DefaultValue = StartDate;
        DataSourceViewWeeklySummary.SelectParameters[1].DefaultValue = EndDate;

        DataSourceViewWeeklySummary.DataBind();
    }