我正在建立一个用户可以导出的报告,但遇到了一些困难。我会喜欢一些人的意见,因为我开始有点灰。
我有CalcTable
,它存储CalcTableMonthly
的父行。要从CalcTable
中检索行,我使用标识符LeaseID
。然后,由于CalcTable
中LeaseID
下有多行,CalcTable
中的每一行在CalcTableMonthly
中会有多个月度值。
MainReport
通过CalcTable
从LeaseID
获取值。
SubReport1
再次通过CalcTableMonthly
从LeaseID
获取值。这些值是CalcTable
中具有值的所有可用CalcTableMonthly
行的组合。
然后最后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报告的当前行中检索月份?
e.Parameters["LiabilityDate"].Values.First()
无效,因为它没有获取值。就是这样,因为我真的不知道...
我有1个主要报告,该主要报告有一个子报告,其中有一个子报告。要检索子报表,我仅将LeaseID值传递给它。第一个子报表还只需要与第一个子报表一起位于的LeaseID BUT 第二个子报表,则需要LeaseID AND 月份。我不确定如何在RDLC的子报表中获取这个月份的变量,因为它在报表生成器的rdl中起作用,如下图所示,但是当我在ASP.net中使用它时,可惜不起作用< / p>
答案 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值,并且一切正常!
希望它对任何偶然发现的人都有帮助!