如何在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属性,以确定正在处理哪个子报表并为该子报表提供数据。