SSRS - 子报告中的子报告

SSRS - Sub report within a sub report

我正在构建一个用户可以导出的报告,但我 运行 遇到了一些困难。当我开始有点灰白时,我希望有人能提供一些意见。


问题

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

MainReport 通过 LeaseIDCalcTable 获取值。

SubReport1 再次通过 LeaseIDCalcTableMonthly 获取值。这些值是在 CalcTableMonthly.

中具有值的所有可用 CalcTable 行的组合

然后最后 SubReport2 获取该月的所有组合值。所以我必须从 SubReport1 传入 LeaseIDMonth

所以你可以看到它在 2 级时也能正常工作。

页面加载

 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

好吧,经过一些修补并离开我的办公桌后,我想到了一个解决方案。

我在第一个函数中创建了另一个 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));
}

因此,一旦处理了第一个子报表,第二个子报表就再次像主报表一样运行,并在其位置处理另一个子报表。我能够 select 该行的 prmMonth 值并且一切正常!

希望它能帮助任何偶然发现这个的人!