找回密码
 立即注册

QQ登录

只需一步,快速开始

crazycats

注册会员

13

主题

38

帖子

101

积分

注册会员

积分
101
crazycats
注册会员   /  发表于:2018-4-23 14:35  /   查看:3349  /  回复:7
目前有个区域报表存在若干的参数,想用H5进行展示,现在根据示例代码已知可以通过改写OnCreateReportHandler和OnLocateDataSourceHandler来动态加载数据源,但是比如我要根据前台传过来的订单编号来取数据库的对应订单,请问前台调用ASMX的时候如何传入参数?我传不过来,具体如下代码:

(前台代码)

(ASMX代码)
现在的问题就是:rpt.Parameters["ordNo"].Value一直都是空值,我怎么知道前台要我显示哪个报表??

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

7 个回复

倒序浏览
KearneyKang讲师达人认证 悬赏达人认证
超级版主   /  发表于:2018-4-23 16:20:19
沙发
您好!
参数的传递可以参考如下的博客:http://www.grapecity.com.cn/blogs/html5viewerparameter
附件是压缩的demo。

后台参数获取的办法: var a = args.Report.Parameters[0].CurrentValue.ToString();
该方法只有在  LocateDataSourceEventArgs  下才起作用。

  1. void DataSource1(object sender, LocateDataSourceEventArgs args)//只加载了LocateDataSource方法一次
  2.         {
  3.             var a = args.Report.Parameters[0].CurrentValue.ToString();
  4.             string connStr = Server.MapPath("/Data/NWind_CHS.mdb");
  5.             Access dl = new Access(connStr);
  6.             if (args.DataSourceName == "SubDetail" && args.DataSetName == "SubDetailSet1")
  7.             {
  8.                 String Id = "1";//参数的邦定;
  9.                 string productSql = string.Format("select 产品.产品名称, 产品.单位数量, 订单明细.单价, 订单明细.数量, 订单明细.折扣 from 订单明细 inner join 产品 on 订单明细.产品ID = 产品.产品ID where 订单ID = {0}", Id);
  10.                 args.Data = dl.ExecuteDataset(productSql);
  11.             }
  12.             else
  13.             {
  14.                 string productSql = string.Format("select 订单.* from 订单");
  15.                 args.Data = dl.ExecuteDataset(productSql);
  16.             }

  17.         }
复制代码






本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
crazycats
注册会员   /  发表于:2018-4-23 17:31:44
板凳
KearneyKang 发表于 2018-4-23 16:20
您好!
参数的传递可以参考如下的博客:http://www.grapecity.com.cn/blogs/html5viewerparameter
附件是 ...

好的,大概知道,但又有新问题了,我现在是区域报表,LocateDataSource方法,怎么知道我当前打开的是哪个报表?我看了半天参数都不知道?区域报表的DataSourceName是什么东西?DatasetName又是什么?
回复 使用道具 举报
KearneyKang讲师达人认证 悬赏达人认证
超级版主   /  发表于:2018-4-23 18:20:35
地板
然后判断报表的话,您用H5然后写服务传入一个报表的地址  reportPath

然后您用switch语句判断就行。
  1.    protected override object OnCreateReportHandler(string reportPath)
  2.         {
  3.             switch (reportPath)
  4.             {

  5.                 case "Reports/SalesDetail.rdlx":
  6.                     definition = (PageReport)base.OnCreateReportHandler(reportPath);
  7.                     _pageDocument = new PageDocument(definition);
  8.                     definition.Document.LocateDataSource += new LocateDataSourceEventHandler(Document_LocateDataSource);
  9.                     return definition;
  10.                 case "Reports/SalesSubDetail.rdlx":
  11.                     definition = (PageReport)base.OnCreateReportHandler(reportPath);
  12.                     _pageDocument = new PageDocument(definition);
  13.                     definition.Document.LocateDataSource += new LocateDataSourceEventHandler(Document_LocateDataSource);
  14.                     return definition;
  15.                 case "RdlReport1":
  16.                     string path = "Reports/RdlReport1.rdlx";
  17.                     definition = (PageReport)base.OnCreateReportHandler(path);
  18.                     _pageDocument = new PageDocument(definition);
  19.                     definition.Document.LocateDataSource += new LocateDataSourceEventHandler(Document_LocateDataSource);
  20.                     return definition;
  21.                 case "SalesDetail.rdlx":
  22.                     string path1 = "Reports/SalesDetail.rdlx";
  23.                     definition = (PageReport)base.OnCreateReportHandler(path1);
  24.                     _pageDocument = new PageDocument(definition);
  25.                     definition.Document.LocateDataSource += new LocateDataSourceEventHandler(Document_LocateDataSource);
  26.                     return definition;
  27.                 default:
  28.                   return base.OnCreateReportHandler(reportPath);
  29.             }
  30.         }
复制代码





DatasourName   是代表数据源

Dataset   代表数据集

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
crazycats
注册会员   /  发表于:2018-4-23 18:31:26
5#
KearneyKang 发表于 2018-4-23 18:20
然后判断报表的话,您用H5然后写服务传入一个报表的地址  reportPath

然后您用switch语句判断就行。

哥哥啊,区域报表,区域报表哪来的这个啊,我只用了参数字段和计算字段啊。
回复 使用道具 举报
crazycats
注册会员   /  发表于:2018-4-23 23:24:22
6#
改到绝望,查看到了调用ASMX的SetParameters方法,但是区域报表的数据加载跟页面报表就完全不一样,翻烂了论坛都没找到,求明天给指导啊哥哥们!!
回复 使用道具 举报
crazycats
注册会员   /  发表于:2018-4-23 23:30:55
7#
为了应付明天的上线,先用了很丑的办法,把原来的报表名改为[报表名]?参数1=xx&参数2=xxxx  
我也是很绝望了。
回复 使用道具 举报
KearneyKang讲师达人认证 悬赏达人认证
超级版主   /  发表于:2018-4-24 09:10:46
8#
本帖最后由 KearneyKang 于 2018-4-24 12:00 编辑

后台参数传递的办法:直接把后台的值复制给参数1的代码实现     rpt.Parameters[0].DefaultValue = "123";

评分

参与人数 1满意度 +5 收起 理由
crazycats + 5 用RDL解决了,感谢工程师的耐心支持!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部