报表查看器未调用子报表方法

时间:2019-05-26 09:13:45

标签: c# asp.net asp.net-web-api reportviewer subreport

我使用以下代码生成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,也将其用作网络API,并且使用Microsoft.ReportViewer.WebForms版本12.0.0.0

1 个答案:

答案 0 :(得分:1)

我将此事件用于呼叫子报告:

      // 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;
                    }
                  }

我希望您将从规范中受益。