crazycats 发表于 2018-4-23 14:35:20

如何给H5区域报表动态的绑定数据并传入参数

目前有个区域报表存在若干的参数,想用H5进行展示,现在根据示例代码已知可以通过改写OnCreateReportHandler和OnLocateDataSourceHandler来动态加载数据源,但是比如我要根据前台传过来的订单编号来取数据库的对应订单,请问前台调用ASMX的时候如何传入参数?我传不过来,具体如下代码:

(前台代码)

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

KearneyKang 发表于 2018-4-23 16:20:19

您好!
参数的传递可以参考如下的博客:http://www.grapecity.com.cn/blogs/html5viewerparameter
附件是压缩的demo。

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

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

      }





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语句判断就行。
   protected override object OnCreateReportHandler(string reportPath)
      {
            switch (reportPath)
            {

                case "Reports/SalesDetail.rdlx":
                  definition = (PageReport)base.OnCreateReportHandler(reportPath);
                  _pageDocument = new PageDocument(definition);
                  definition.Document.LocateDataSource += new LocateDataSourceEventHandler(Document_LocateDataSource);
                  return definition;
                case "Reports/SalesSubDetail.rdlx":
                  definition = (PageReport)base.OnCreateReportHandler(reportPath);
                  _pageDocument = new PageDocument(definition);
                  definition.Document.LocateDataSource += new LocateDataSourceEventHandler(Document_LocateDataSource);
                  return definition;
                case "RdlReport1":
                  string path = "Reports/RdlReport1.rdlx";
                  definition = (PageReport)base.OnCreateReportHandler(path);
                  _pageDocument = new PageDocument(definition);
                  definition.Document.LocateDataSource += new LocateDataSourceEventHandler(Document_LocateDataSource);
                  return definition;
                case "SalesDetail.rdlx":
                  string path1 = "Reports/SalesDetail.rdlx";
                  definition = (PageReport)base.OnCreateReportHandler(path1);
                  _pageDocument = new PageDocument(definition);
                  definition.Document.LocateDataSource += new LocateDataSourceEventHandler(Document_LocateDataSource);
                  return definition;
                default:
                  return base.OnCreateReportHandler(reportPath);
            }
      }




DatasourName   是代表数据源

Dataset   代表数据集

crazycats 发表于 2018-4-23 18:31:26

KearneyKang 发表于 2018-4-23 18:20
然后判断报表的话,您用H5然后写服务传入一个报表的地址reportPath

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


哥哥啊,区域报表,区域报表哪来的这个啊,我只用了参数字段和计算字段啊。

crazycats 发表于 2018-4-23 23:24:22

改到绝望,查看到了调用ASMX的SetParameters方法,但是区域报表的数据加载跟页面报表就完全不一样,翻烂了论坛都没找到,求明天给指导啊哥哥们!!

crazycats 发表于 2018-4-23 23:30:55

为了应付明天的上线,先用了很丑的办法,把原来的报表名改为[报表名]?参数1=xx&参数2=xxxx:Q
我也是很绝望了。

KearneyKang 发表于 2018-4-24 09:10:46

本帖最后由 KearneyKang 于 2018-4-24 12:00 编辑

后台参数传递的办法:直接把后台的值复制给参数1的代码实现   rpt.Parameters.DefaultValue = "123";
页: [1]
查看完整版本: 如何给H5区域报表动态的绑定数据并传入参数