本帖最后由 KearneyKang 于 2020-3-24 12:29 编辑
当把报表ReportID当做一个参数入口进行参数传递,然后后台通过使用Split函数进行一个参数的分割进行数据的筛选。当参数过多或者参数内容过多的时候,会导致导出功能失效,出现一个Not Found的界面
下面我们就来看看具体的解决办法:
把ReportID当做一个参数入口的写法:
TextBox1和TextBox2和TextBox3 当做参数输入框,这个可以根据自己的需求进行输入,我这里参数之间的分割使用的是’;’。 - report: {
- id: 'Reports/SalesDetail.rdlx' + ';' + $("#TextBox1").val()+';' + $("#TextBox2").val()+';' + $("#TextBox3").val()
- },
复制代码把reportID当做参数入口的前段代码:
- <script type="text/javascript">
- function Search() {
- $(function () {
- var viewer = GrapeCity.ActiveReports.Viewer({
- element: '#viewer',
- report: {
- id: 'Reports/SalesDetail.rdlx' + ';' + $("#TextBox1").val()+';' + $("#TextBox2").val()+';' + $("#TextBox3").val() //报表名称和参数的传递
- },
- reportService:
- {
- url: 'WebService3.asmx'
- },
- uiType: 'Desktop',
- localeUri: 'Scripts/i18n/Localeuri.txt',
- });
- })
- };
- </script
复制代码后台代码 - <blockquote>public class WebService3 : GrapeCity.ActiveReports.Web.ReportService
复制代码- public class WebService3 : GrapeCity.ActiveReports.Web.ReportService
- {
- PageDocument _pageDocument;
- PageReport definition;
- public static string name = "";
- public static string city = "";
- [WebMethod]
- protected override object OnCreateReportHandler(string reportAndParams)
- {
- string reportName = reportAndParams.Split(';')[0];
- name = reportAndParams.Split(';')[1];
- city = reportAndParams.Split(';')[2];
- definition = (PageReport)base.OnCreateReportHandler(reportName);
- _pageDocument = new PageDocument(definition);
- definition.Document.LocateDataSource += new LocateDataSourceEventHandler(DataSource1);
- return definition;
- }
- void DataSource1(object sender, LocateDataSourceEventArgs args)//只加载了LocateDataSource方法一次
- {
- string connStr = Server.MapPath("/Data/NWind_CHS.mdb");
- DataTable dt = new DataTable();
- Access dl = new Access(connStr);
- string nameone = name;
- string Id = city;
- if (Id != "" && nameone != "")
- {
- string productSql = string.Format("select 订单.* from 订单 where 货主名称='{0}' and 货主城市='{1}'", nameone, Id);
- args.Data = dl.ExecuteDataset(productSql);
- }
- if (nameone != "" && Id == "")
- {
- string productSql = string.Format("select 订单.* from 订单 where 货主名称='{0}' ", nameone);
- dt = dl.ExecuteDataset(productSql);
- args.Data = dl.ExecuteDataset(productSql);
- }
- if (nameone == "" && Id != "")
- {
- string productSql = string.Format("select 订单.* from 订单 where 货主城市='{0}' ", Id);
- dt = dl.ExecuteDataset(productSql);
- args.Data = dl.ExecuteDataset(productSql);
- }
- if (nameone == "" && Id == "")
- {
- string productSql = string.Format("select 订单.* from 订单 ");
- dt = dl.ExecuteDataset(productSql);
- args.Data = dl.ExecuteDataset(productSql);
- }
- //else
- //{
- // args.Data = null;
- //}
- }
- }
复制代码
参数传递获取这块我就这样简单一说 下面来说说如何调整对应的JS文件,来解决导出的问题 1、找到GrapeCity.ActiveReports.Viewer.Html.js文件
2、找到JS文件里导出属性设置内容
3、修改导出报表的名称FileName 我这边是根据自己的需求使用芬根函数来获取真正的报表名称:FileName:viewer.report().reportName.split(';')[0]
4、就这样设置修改导出报表的名称就可以解决你的问题。
|