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

时间:2015-02-04 20:45:46

标签: c# asp.net reporting-services reportviewer

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

我有一份主要报告,我在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的报告路径设置为我的主报告。

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

1 个答案:

答案 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属性   确定正在处理哪个子报表并为其提供数据   子报表。