如何在SSRS子报表中填充数据集?

这似乎应该是微不足道的,但我遇到了困难。

我有一份主报告,我在ReportViewer.aspx.cs.填写了如下数据集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的报告路径设置为我的主报告。

两者都使用相同的数据集,如果这是任何后果。

您需要使用SubreportProcessing Event来设置数据源。 请参阅以下演练 。

 ReportViewer.LocalReport.SubreportProcessing += new SubreportProcessingEventHandler(exampleSubreportProcessingEventHandler); void exampleSubreportProcessingEventHandler(object sender, SubreportProcessingEventArgs e) { e.DataSources.Add(new ReportDataSource("SubReportDataSet", GetSummaryRequestsDataSet())); } 

从提供的链接SubreportProcessing Event 。

SubreportProcessing事件将在主报表中为子报表的每个实例触发,而不仅仅针对每个子报表定义。 如果报表包含来自同一报表定义的多个子报表实例,则会为每个实例触发此事件。

如果主报表有多个子报表,则可以检查SubreportProcessingEventArgs类的ReportPath属性,以确定正在处理哪个子报表并为该子报表提供数据。