首页 > 解决方案 > SubreportProcessing 未在 rdlc 报告上触发

问题描述

您好,我在使用 RDLC 子报告时遇到问题。我有一个非常简单的设置,在那里我有人和他们的住所。

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

我已经像这样设置了我的reportviewer:

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:

ScreenShotOfParameterConfig

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

以及父子报表和参数定义

parentsSubreportAndParameterConf

<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 扩展名。两个报告都在同一个子目录中。

父报表在没有子报表的情况下工作正常。

我知道以前有人问过这个问题,但似乎没有一个答案能解决我的问题。

任何帮助将不胜感激。

编辑:遵循本教程并遇到完全相同的问题 https://www.c-sharpcorner.com/article/rdlc-subreport-using-c-sharp-and-wpf/

标签: c#eventsreportrdlcsubreport

解决方案


好的,所以我设法解决了这个问题。

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

最初,当我创建报告时,命名空间是

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

只要您在此报告中添加任何参数,VS 就会将其更改为

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

我的“父”报告没有改变(因为它没有任何参数,除了子报告中定义的 on )。但是我的子报告发生了变化。

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

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

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

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


推荐阅读