如何使用HTML5报告查看器使用Telerik Reports

时间:2014-05-07 19:57:04

标签: c# asp.net html5 telerik telerik-reporting

因此,我正在使用Telerik报告,创建服务器/客户端概念验证项目,并且我使用ASP.NET WebAPI 2.0和HTML5报告查看器。当我在服务器中有.trdx文件时,我已经让它工作了,如果我只想使用独立的报告生成器,然后将文件添加到项目文件夹中,这样就可以了。

但是,我更喜欢能够使用集成的visual studio报告生成器来制作报告。集成生成器的输出当然是cs文件,但我不确定如何在客户端上调用它们,以便HTML5查看器可以正确解析它们。服务器上的控制器如下。

public class ReportsController : ReportsControllerBase
{
    protected override IReportResolver CreateReportResolver()
    {
        var appPath = HttpContext.Current.Server.MapPath("~/");

        return new ReportFileResolver(appPath);
    }

    protected override ICache CreateCache()
    {
        return Telerik.Reporting.Services.Engine.CacheFactory.CreateFileCache();
    }
}

在客户端请求数据的代码如下。

$(document).ready(function () {
        $("#reportViewer1")
            .telerik_ReportViewer({
                serviceUrl: "http://localhost:XXXXX/api/reports/",
                templateUrl: 'ReportViewer/templates/telerikReportViewerTemplate.html',
                reportSource: { report: "Reports/Accounting/InvoiceSubGroup/Invoice.trdx" },
                viewMode: telerikReportViewer.ViewModes.INTERACTIVE,
                scaleMode: telerikReportViewer.ScaleModes.SPECIFIC,
                scale: 1.0,
                ready: function () {
                },
            });           
    });

任何可以让我更清楚如何更改此信息的信息,我都会感激。

1 个答案:

答案 0 :(得分:4)

所以我不能完全确定使用FileReportResolver是否可以像以前一样使用FileReportResolver,但是我或多或少地想出了如何做到这一点。并没有打破我在其他地方使用trdx文件的情况。

对html页面的更改如下:

旧的,这仍然是如何调用将成为trdx类型的报告。 -

reportSource: { report: "Reports/Warehouse/Facts/Invoice.trdx" },

新的,这就是您通过集成报表查看器引用报表的方式 -

reportSource: { report: "TelerikRESTHost.Reports.Warehouse.Facts.People, TelerikRESTHost" },

第一个参数是[报告名称] .Designer.cs文件(位于顶部)内的命名空间以及您正在寻找的特定命名空间。在我的例子中,报告是People.cs,名称空间如上所示。两者之间的区别在于它们是什么类型的文件,old是.trdx文件而new是.cs文件。第二个参数是文件所在项目的程序集名称。

这里重要的事情是报告源第二个参数 HAS 是项目的程序集名称,这是因为我通过解决方案资源管理器重命名它已经有一段时间了,但这并没有改变程序集名称。

就控制器而言,我必须按如下方式对其进行修改

return new ReportFileResolver(appPath)
            .AddFallbackResolver(new ReportTypeResolver());

这显然会尝试首先根据文件名解析它(旧方法),如果它不能这样做,那么它会尝试将其解析为一种类型(新方法)。

我希望这可以帮助别人避免我花时间试图解决这个问题。如果有人能够找到一种简单的方法来组合这些方法,以便客户端不必知道服务器上的文件格式是什么类型,我会将您的答案标记为解决方案(假设它有效),因为那是我一开始就在寻找什么。现在这至少是一个可以接受的工作。