在之前的教程中我们学习了如何将前台数据传递给报表参数,本文主要讲解,如何通过后台为报表参数赋值,并传递给前台页面元素。

系列博客:

如何在MVC 5中使用 HTML5 Viewer

 

开发环境

 

VS2013+MVC4.0+ ActiveReports10

实现步骤:

1. 创建工程

在Visual Studio 2013中创建MVC Web项目

image

 

2. 创建Web服务文件

添加服务,在工程中添加一个【Web 服务】,然后切换到代码视图,修改该类继承的原始类型为GrapeCity.ActiveReports.Web.ReportService

image

代码:

   public class WebService1 :GrapeCity.ActiveReports.Web.ReportService
    {
        protected override object OnCreateReportHandler(string reportPath)
        {
            PageReport definition1 = (PageReport)base.OnCreateReportHandler(reportPath);
            //definition1.Report.ReportParameters[0].DefaultValue.Values[0].ToString();
            return definition1;
        }
     
    }

 

3. 添加RDL 报表,并设置为运行时数据源

image

 

3.1 为报表添加参数,设置默认值

image

 

3.2 为报表绑定动态时数据源

image

添加字段:

image

 

绑定到数据控件中:

image

 

4. 在Web服务文件中实现LocateDocument方法

     private void Document_LocateDataSource(object sender, LocateDataSourceEventArgs args)
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("Field1",typeof(int));
            dt.Columns.Add("Field2");
            dt.Columns.Add("Field3");
            dt.Rows.Add(1,"test","test1");
            dt.Rows.Add(2, "test", "test1");
            dt.Rows.Add(2, "test", "test1");
            string temp=args.Report.Parameters[0].CurrentValue.ToString();
            args.Data = dt;
           
        }

 

4. 在 Index 页面中添加HTML5Viewer,并修改服务文件的URL

 

  var viewer = GrapeCity.ActiveReports.Viewer({
        element: '#viewerContainer',
        reportService: {
            url: '/WebService1.asmx'
        },
        uiType: 'desktop',
        report: {id:"RdlReport1.rdlx"},
       
        localeUri: 'Scripts/en.txt',
        error: function (error) {
            console.log("error");
        }
    });

 

5. 调用 reportLoaded方法

var reportLoaded = function reportLoaded(reportInfo) {
        temp=reportInfo.parameters

 

6. 配置路由

打开RouteConfig.cs文件,添加以下内容:

 routes.IgnoreRoute("{*allActiveReport}", new { allActiveReport = @".*\.ar10(/.*)?" });
            routes.IgnoreRoute("WebService1.asmx/{*pathInfo}");

 

您在使用产品过程中有任何疑问,可以登录官方产品技术社区和经验丰富的技术工程师、ActiveReports开发人员交流:了解更多

了解ActiveReports产品更多特性:

/developer/activereports

下载产品体验产品功能:

/download/?pid=16