将以编程方式创建的Report Book设置为HTML5 ReportSource

问题描述 投票:0回答:1

用户可以选择多个订单,并将所有报告下载为一个PDF。我们使用PdfSmartCopy合并报告:

protected void Print(int[] order_ids)
{
    byte[] merged_reports;

    using (MemoryStream ms = new MemoryStream())
    using (Document doc = new Document())
    using (PdfSmartCopy copy = new PdfSmartCopy(doc, ms))
    {
        doc.Open();

        foreach (string order_id in order_ids)
        {
            Telerik.Reporting.InstanceReportSource reportSource = new Telerik.Reporting.InstanceReportSource();
            reportSource.ReportDocument = new OrderReport();
            reportSource.Parameters.Add(new Telerik.Reporting.Parameter("order_id", order_id));

            RenderingResult result = new ReportProcessor().RenderReport("PDF", reportSource, new Hashtable());

            using (PdfReader reader = new PdfReader(result.DocumentBytes))
            {
                copy.AddDocument(reader);
            }
        }

        doc.Close();

        merged_reports = ms.ToArray();
    }

    Response.Clear();
    Response.Cache.SetCacheability(HttpCacheability.NoCache);
    Response.Expires = -1;
    Response.Buffer = false;
    Response.ContentType = "application/pdf";
    Response.OutputStream.Write(merged_reports, 0, merged_reports.Length);
}

但我们开始在其他地方使用HTML5 ReportViewer,我们也想在那里使用它以保持一致。我想过以编程方式创建ReportBook并将其设置为ReportViewer的ReportSource,但我唯一可以设置的是字符串。我们之前已经使用过ReportBook,但这是我们可以通过new SomeReportBook().GetType().AssemblyQualifiedName;设置的实际SomeReportBook.cs。

任何线索?这就是我现在所拥有的:

protected void Print(int[] order_ids)
{
    Telerik.Reporting.ReportBook reportBook = new Telerik.Reporting.ReportBook();

    foreach (string order_id in order_ids)
    {
        Telerik.Reporting.InstanceReportSource reportSource = new Telerik.Reporting.InstanceReportSource();
        reportSource.ReportDocument = new OrderReport();
        reportSource.Parameters.Add(new Telerik.Reporting.Parameter("order_id", order_id));

        reportBook.ReportSources.Add(reportSource); 
    }

    this.ReportViewer.ReportSource = new Telerik.ReportViewer.Html5.WebForms.ReportSource() 
    {
        Identifier = // Can't use reportBook.GetType().AssemblyQualifiedName
    };
}
c# asp.net telerik-reporting
1个回答
0
投票

很长一段时间以来,我一直在努力应对这一挑战;如果其他人面临这样的挑战我会分享。请这样做。

1.创建一个继承自 - Telerik.Reporting.ReportBook的类2.创建一个在报表簿类中加载所有报表的方法,即

this.ReportSources.Add(new TypeReportSource
       {
            TypeName = typeof(Report1).AssemblyQualifiedName
       });
  1. 在类构造函数中调用方法
  2. 使用以下代码设置报表查看器源 var reportSource = new Telerik.ReportViewer.Html5.WebForms.ReportSource(); reportSource.IdentifierType = IdentifierType.TypeReportSource; reportSource.Identifier = typeof(ReportCatalog).AssemblyQualifiedName;//or namespace.class, assembly e.g. "MyReports.Report1, MyReportsLibrary" reportSource.Parameters.Add("Parameter1", "Parameter1"); reportSource.Parameters.Add("Parameter2", "Parameter2"); ReportsViewer1.ReportSource = reportSource;

Report1 =从Telerik.Reporting.ReportBook继承的新创建的类

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.