【问题标题】:How do I fill a dataset in an SSRS subreport?如何在 SSRS 子报表中填充数据集?
【发布时间】:2015-02-04 20:45:45
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

    您需要使用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 属性 确定正在处理哪个子报表并为其提供数据 子报告。

    【讨论】:

    • 感谢您的回复。如果我有多个子报表,每个子报表都有自己的数据集,这将如何工作?
    猜你喜欢
    • 2016-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多