找回密码
 立即注册

QQ登录

只需一步,快速开始

Lenka.Guo 讲师达人认证 悬赏达人认证
超级版主   /  发表于:2021-7-9 14:31  /   查看:3074  /  回复:0
JSViewer 是 ActiveReports 主要的报表展示工具,报表参数是报表接受外界输入的唯一值,因此我们经常需要使用从前台为报表传值后,获取值后实现数据查找,数据过滤,以及其他的权限控制等,本篇文章来分享下如何使用JSViewer在前端传值的,并在后台获取到当前值。

1. JSViewer 初始化

即当进入页面时,先创建JSViewer 对象。
  1. viewer = GrapeCity.ActiveReports.JSViewer.create({
  2.         element: '#viewerContainer'
  3.       });
复制代码



2. 当用户选择加载对应的报表时,调用JSViewer的OpenReport 接口为报表传递需要打开的报表ID 及对应的参数格式

  1.   viewer.openReport('AcmeStore.rdlx', [{name:'p1',values:['test']}]);
复制代码


注意: openReport 包含两个参数,第一个是报表名,第二个是 对应的参数对象数组,即一个报表可能会有多个参数,因此本身是数组外部会用[]包围,每一个参数是一个json 对象会包含参数名和参数值,参数值也可能是多值存在数组中因此参数的格式为
[{name:'参数1',values:["value1"]},{name:'参数2',values:["value1"]}]

3. 前台的代码已经完成了,现在再看后台中如何获取:
一般情况下后台获取报表参数,可以通过SetLocateDataSource 方法,注意不是LocateDataSource handler,这两个会有区别,只有SetLocateDataSource 方法才有 args.ReportParameters对象。
  1. app.UseReporting(settings =>
  2.             {
  3.                 //settings.UseEmbeddedTemplates(EmbeddedReportsPrefix, Assembly.GetAssembly(GetType()));
  4.                settings.UseCustomStore(getReportFn);
  5.                settings.UseCompression = true;
  6.                settings.SetLocateDataSource(args => {
  7.                 var temp = args.ReportParameters[0].Value;
  8.                 DataTable dt = new DataTable();
  9.                 dt.Columns.Add("a1");
  10.                 dt.Columns.Add("a2");
  11.                 dt.Rows.Add("a1", "a1");


  12.                 return dt; });
  13.                
  14.             });
复制代码



0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部