首页 > 解决方案 > 报表查看器没有调用子报表方法

问题描述

我使用以下代码生成 PDF 报告:

public partial class Report{   
 public void myMethode(DataTable DT){

        ReportViewer reportViewer1 = new ReportViewer();
        reportViewer1.LocalReport.SetBasePermissionsForSandboxAppDomain(new PermissionSet(PermissionState.Unrestricted));
        reportViewer1.LocalReport.ReportPath = @"Something" + ReportName + ".rdlc";
        reportViewer1.ProcessingMode = ProcessingMode.Local;

        reportViewer1.LocalReport.DataSources.Add(new ReportDataSource("DataSet1", DT));
        reportViewer1.LocalReport.SubreportProcessing += new SubreportProcessingEventHandler(SubReportProcessing);

        Warning[] warnings;
        string[] streamIds;
        string mimeType = string.Empty;
        string encoding = string.Empty;
        string extension = string.Empty;
        reportViewer1.LocalReport.Render("PDF", null, out mimeType, out encoding, out extension, out streamIds, out warnings);

   }
 private static void SubReportProcessing(object sender, Microsoft.Reporting.WebForms.SubreportProcessingEventArgs e)
   {
        //do something
   }

}

它适用于每个主报告,但是当它想要生成子报告时,它不会调用SubReportProcessing方法!!!

那么有人可以帮我找到问题吗?

Dot Net 4.7.2也在使用我把它用作web api,我使用Microsoft.ReportViewer.WebForms版本12.0.0.0

标签: c#asp.netasp.net-web-apireportviewersubreport

解决方案


我将此事件用于调用子报告:

      // myMethode Function
        reportViewer.Reset();
        reportViewer.LocalReport.DataSources.Add(dataSource);
        reportViewer.LocalReport.ReportPath = "Report Path";
        reportViewer.LocalReport.SubreportProcessing += 
                                 LocalReportOnSubreportProcessing;
        reportViewer.LocalReport.Refresh();

   private void LocalReportOnSubreportProcessing(object sender, 
                                                 SubreportProcessingEventArgs e)
        {
            //Following Code Is just a Sample 
            switch (e.ReportPath)
            {
                case "ExamResult1To3Scores":
                    {
                        var ranksReportDataSource = new ReportDataSource
                        {
                            Name = "ExamResult1To3",
                            Value = GetCandidatesExamResultGuidanceRequest
                        };
                        e.DataSources.Add(ranksReportDataSource);
                        break;
                    }

                case "ExamResult1To3Chart":
                    {
                        var levelRank = 
                            GetCandidatesRequest.First().Guidance1To3ChartData;

                        var chartReportDataSource = new ReportDataSource
                        {
                            Name = "ExamResult1To3Chart",
                            Value = levelRank
                        };
                        e.DataSources.Add(chartReportDataSource);
                        break;
                    }
                  }

我希望你会从代码中受益。


推荐阅读