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

时间:2018-12-20 13:03:19

标签: c# asp.net telerik-reporting

用户可以选择多个订单,并将所有报告下载为一个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,但这是一个实际的SomeReportBook.cs,可以通过new SomeReportBook().GetType().AssemblyQualifiedName;进行设置。

有任何线索吗?这是我目前所拥有的:

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

1 个答案:

答案 0 :(得分: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

的新创建的类