如何给H5区域报表动态的绑定数据并传入参数
目前有个区域报表存在若干的参数,想用H5进行展示,现在根据示例代码已知可以通过改写OnCreateReportHandler和OnLocateDataSourceHandler来动态加载数据源,但是比如我要根据前台传过来的订单编号来取数据库的对应订单,请问前台调用ASMX的时候如何传入参数?我传不过来,具体如下代码:(前台代码)
(ASMX代码)
现在的问题就是:rpt.Parameters["ordNo"].Value一直都是空值,我怎么知道前台要我显示哪个报表??
您好!
参数的传递可以参考如下的博客: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);
}
}
KearneyKang 发表于 2018-4-23 16:20
您好!
参数的传递可以参考如下的博客:http://www.grapecity.com.cn/blogs/html5viewerparameter
附件是 ...
好的,大概知道,但又有新问题了,我现在是区域报表,LocateDataSource方法,怎么知道我当前打开的是哪个报表?我看了半天参数都不知道?区域报表的DataSourceName是什么东西?DatasetName又是什么? 然后判断报表的话,您用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 代表数据集
KearneyKang 发表于 2018-4-23 18:20
然后判断报表的话,您用H5然后写服务传入一个报表的地址reportPath
然后您用switch语句判断就行。
哥哥啊,区域报表,区域报表哪来的这个啊,我只用了参数字段和计算字段啊。 改到绝望,查看到了调用ASMX的SetParameters方法,但是区域报表的数据加载跟页面报表就完全不一样,翻烂了论坛都没找到,求明天给指导啊哥哥们!! 为了应付明天的上线,先用了很丑的办法,把原来的报表名改为[报表名]?参数1=xx&参数2=xxxx:Q
我也是很绝望了。 本帖最后由 KearneyKang 于 2018-4-24 12:00 编辑
后台参数传递的办法:直接把后台的值复制给参数1的代码实现 rpt.Parameters.DefaultValue = "123";
页:
[1]