SSRS - 子报告中的子报告
SSRS - Sub report within a sub report
我正在构建一个用户可以导出的报告,但我 运行 遇到了一些困难。当我开始有点灰白时,我希望有人能提供一些意见。
问题
我有 CalcTable
存储 CalcTableMonthly
的父行。要从 CalcTable
检索行,我使用标识符 LeaseID
。然后由于 CalcTable
中有多个行在一个 LeaseID
下,并且 CalcTable
中的每一行在 CalcTableMonthly
中都有多个月度值。
MainReport
通过 LeaseID
从 CalcTable
获取值。
SubReport1
再次通过 LeaseID
从 CalcTableMonthly
获取值。这些值是在 CalcTableMonthly
.
中具有值的所有可用 CalcTable
行的组合
然后最后 SubReport2
获取该月的所有组合值。所以我必须从 SubReport1 传入 LeaseID
和 Month
。
所以你可以看到它在 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 报告的当前行中检索月份?
我尝试过的东西
- 谷歌搜索类似问题,找不到任何东西
- 将 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 值并且一切正常!
希望它能帮助任何偶然发现这个的人!
我正在构建一个用户可以导出的报告,但我 运行 遇到了一些困难。当我开始有点灰白时,我希望有人能提供一些意见。
问题
我有 CalcTable
存储 CalcTableMonthly
的父行。要从 CalcTable
检索行,我使用标识符 LeaseID
。然后由于 CalcTable
中有多个行在一个 LeaseID
下,并且 CalcTable
中的每一行在 CalcTableMonthly
中都有多个月度值。
MainReport
通过 LeaseID
从 CalcTable
获取值。
SubReport1
再次通过 LeaseID
从 CalcTableMonthly
获取值。这些值是在 CalcTableMonthly
.
CalcTable
行的组合
然后最后 SubReport2
获取该月的所有组合值。所以我必须从 SubReport1 传入 LeaseID
和 Month
。
所以你可以看到它在 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 报告的当前行中检索月份?
我尝试过的东西
- 谷歌搜索类似问题,找不到任何东西
- 将 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 值并且一切正常!
希望它能帮助任何偶然发现这个的人!