SSRS-子报告中的子报告

时间:2018-10-05 11:56:41

标签: c# asp.net reporting-services ssrs-2008 rdlc

我正在建立一个用户可以导出的报告,但遇到了一些困难。我会喜欢一些人的意见,因为我开始有点灰。


问题

我有CalcTable,它存储CalcTableMonthly的父行。要从CalcTable中检索行,我使用标识符LeaseID。然后,由于CalcTableLeaseID下有多行,CalcTable中的每一行在CalcTableMonthly中会有多个月度值。

MainReport通过CalcTableLeaseID获取值。

SubReport1再次通过CalcTableMonthlyLeaseID获取值。这些值是CalcTable中具有值的所有可用CalcTableMonthly行的组合。

然后最后SubReport2获取该月的所有组合值。因此,我必须从SubReport1中传递LeaseIDMonth

因此您可以看到它在第2级上都有效。

bsxfun

页面加载

 protected void Page_Load(object sender, EventArgs e)
    {
        if(!Page.IsPostBack)
        {
            // Get LeaseID from query string
            sqls_Summary.SelectParameters["LeaseID"].DefaultValue = Request["LeaseID"];
            // Set report path
            this.rep_Main.LocalReport.ReportPath = "Reports\\CalculationReports\\rpt_Summary_Export.rdlc";
            // Set Report DataSources
            this.rep_Main.LocalReport.DataSources.Add(new ReportDataSource("dsLeaseCalculations", sqls_Summary));
            this.rep_Main.LocalReport.DataSources.Add(new ReportDataSource("dsLeaseCalculationsMonths", sqls_Summary_Months));
            this.rep_Main.LocalReport.DataSources.Add(new ReportDataSource("dsLeaseCalculationsViewMonth", sqls_Summary_ViewMonth));
            // Set the subreport processing event.
            this.rep_Main.LocalReport.SubreportProcessing += new SubreportProcessingEventHandler(subReportProccessingFunc);
            this.rep_Main.LocalReport.Refresh();
        }

    }

子报表处理事件

public void subReportProccessingFunc(object sender, SubreportProcessingEventArgs e)
    {
        sqls_Summary_Months.SelectParameters["LeaseID"].DefaultValue = e.Parameters["prmLeaseID"].Values.First();
        e.DataSources.Add(new ReportDataSource("dsLeaseCalculationsMonths", sqls_Summary_Months));

        sqls_Summary_ViewMonth.SelectParameters["LeaseID"].DefaultValue = e.Parameters["prmLeaseID"].Values.First();
        sqls_Summary_ViewMonth.SelectParameters["Month"].DefaultValue = // What to put here????
        e.DataSources.Add(new ReportDataSource("dsLeaseCalculationsViewMonth", sqls_Summary_ViewMonth));
    }

从上面的代码行sqls_Summary_ViewMonth.SelectParameters["Month"].DefaultValue =开始,我不确定如何处理。如何从RDLC报告的当前行中检索月份?

我尝试过的事情

  1. 正在搜索类似问题,找不到任何东西
  2. 将DefaultValue设置为e.Parameters["LiabilityDate"].Values.First()无效,因为它没有获取值。

就是这样,因为我真的不知道...


摘要

我有1个主要报告,该主要报告有一个子报告,其中有一个子报告。要检索子报表,我仅将LeaseID值传递给它。第一个子报表还只需要与第一个子报表一起位于的LeaseID BUT 第二个子报表,则需要LeaseID AND 月份。我不确定如何在RDLC的子报表中获取这个月份的变量,因为它在报表生成器的rdl中起作用,如下图所示,但是当我在ASP.net中使用它时,可惜不起作用< / p>

enter image description here

1 个答案:

答案 0 :(得分:0)

经过一番修补并离开办公桌后,我有所思索,并且想到了解决方案。

我在第一个函数中创建了另一个SubreportProcessingEventHandler。

public void subReportProccessingFunc(object sender, SubreportProcessingEventArgs e)
{
   sqls_Summary_Months.SelectParameters["LeaseID"].DefaultValue = 
   e.Parameters["prmLeaseID"].Values.First();
   e.DataSources.Add(new ReportDataSource("dsLeaseCalculationsMonths", 
   sqls_Summary_Months));

   this.rep_Main.LocalReport.SubreportProcessing += new SubreportProcessingEventHandler(subReportProccessingFunc1);
}

public void subReportProccessingFunc1(object sender, SubreportProcessingEventArgs e)
{
   sqls_Summary_ViewMonth.SelectParameters["LeaseID"].DefaultValue = e.Parameters["prmLeaseID"].Values.First();
   sqls_Summary_ViewMonth.SelectParameters["Month"].DefaultValue = e.Parameters["prmMonth"].Values.First();
   e.DataSources.Add(new ReportDataSource("dsLeaseCalculationsViewMonth", sqls_Summary_ViewMonth));
}

因此,一旦处理了第一个子报表,第二个子报表便再次像主报表一样工作,而另一个子报表将在其位置处理。我能够为该行选择prmMonth值,并且一切正常!

希望它对任何偶然发现的人都有帮助!