这似乎应该是微不足道的,但我遇到了困难。
我有一份主要报告,我在ReportViewer.aspx.cs.
ReportViewer.LocalReport.ReportPath = "~/SummaryReport.rdlc";
ReportDataSource requestsSource = new ReportDataSource();
requestsSource.Name = "RequestHeadersDataSet";
requestsSource.Value = GetSummaryRequestsDataSet(); // Returns DT
ReportViewer.LocalReport.DataSources.Add(requestsSource);
我还有一个子报表,它在我的主报表中的一个表组中的行组中引用。数据集包含列RequestName
。我通过参数选项卡中的子报表属性传入此内容。
一旦我将数据集添加到子报表,我就会收到一个错误:Data retrieval failed for the subreport.
不足为奇,考虑到我从来没有用任何东西填充它。
但是如何添加到子报表数据源? ReportViewer的报告路径设置为我的主报告。
如果有任何后果,两者都使用相同的数据集。
答案 0 :(得分:3)
您需要使用SubreportProcessing Event来设置数据源。请参阅以下walkthrough。
ReportViewer.LocalReport.SubreportProcessing +=
new SubreportProcessingEventHandler(exampleSubreportProcessingEventHandler);
void exampleSubreportProcessingEventHandler(object sender, SubreportProcessingEventArgs e)
{
e.DataSources.Add(new ReportDataSource("SubReportDataSet", GetSummaryRequestsDataSet()));
}
来自提供的链接SubreportProcessing Event。
为每个实例触发SubreportProcessing事件 主报表中的子报表,而不仅仅是每个子报表 定义。如果报表包含多个子报表实例 相同的报告定义,将为每个实例触发此事件。
如果主报表有多个子报表,则可以检查 SubreportProcessingEventArgs类的ReportPath属性 确定正在处理哪个子报表并为其提供数据 子报表。