SubreportProcessing 未触发 rdlc 报告

SubreportProcessing not firing on rdlc report

您好,我在使用 RDLC 子报表时遇到问题。 我有一个非常简单的设置,其中有人员及其住所。

问题是没有加载包含每个人住所的子报表,因为从未触发 SubreportProcessing 事件。

我已经像这样设置了我的报告查看器:

private void LoadAnniversaryReport()
        {
            DataSet dt = new ResidentSearchServiceClient().GetAnniversaries();
            residenceDataTable = dt.Tables[1];

            ReportDataSource personDataSource = new ReportDataSource("Dataset", dt.Tables[0]);

            this.ReportViewer.LocalReport.ReportPath = "Reports\Anniversary\Anniversary.rdlc";
            this.ReportViewer.LocalReport.DataSources.Clear();
            this.ReportViewer.LocalReport.DataSources.Add(personDataSource);
            this.ReportViewer.LocalReport.SubreportProcessing += ResidenceSubreportProcessing;
            this.ReportViewer.Refresh();
            this.ReportViewer.RefreshReport();

            _isReportViewerLoaded = true;
        }

子报表有一个名为 "Id" 的参数。这是子报表参数定义的xml:

<ReportParameters>
    <ReportParameter Name="Id">
      <DataType>Float</DataType>
      <Nullable>true</Nullable>
      <Prompt>ReportParameter1</Prompt>
    </ReportParameter>
  </ReportParameters>

以及父子报表和参数定义

<Subreport Name="PersonResidences">
    <ReportName>PersonResidences</ReportName>
    <Parameters>
        <Parameter Name="Id">
            <Value>=Fields!ENTITYID.Value</Value>
        </Parameter>
    </Parameters>
    <OmitBorderOnPageBreak>true</OmitBorderOnPageBreak>
    <Style>
        <Border>
            <Style>None</Style>
        </Border>
    </Style>
</Subreport>

"ReportName" 是报告在文件系统上的确切名称,不带 .rdlc 扩展名。两个报告都在同一个子目录中。

没有子报表,父报表工作正常。

我知道以前有人问过这个问题,但是 none 的答案似乎解决了我的问题。

如有任何帮助,我们将不胜感激。

编辑: 按照本教程进行操作并遇到了完全相同的问题 https://www.c-sharpcorner.com/article/rdlc-subreport-using-c-sharp-and-wpf/

好的,我设法解决了问题。

问题是,使用 VS2019,当您编辑定义时,报告定义会发生一些奇怪的事情。这导致我的目标名称空间错误!

最初创建报告时,名称空间是

xmlns="http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition"

只要您向该报表添加任何参数,VS 就会将其更改为

xmlns="http://schemas.microsoft.com/sqlserver/reporting/2016/01/reportdefinition"

我的 "Parent" 报表,没有改变(因为它除了子报表中定义的 on 之外没有任何参数)。但是我的子报表变了。

现在 ReportViewer 的默认版本无法再显示子报表并返回找不到它的非常有用的异常信息。

所以我基本上做了两件事:

  • 通过 Nuget 升级了我的 ReportViewer 程序集 (Microsoft.ReportViewer.VS2015.WinForms)
  • 确保两个报告都针对相同的命名空间

我希望有一天这会对某人有所帮助。