找回密码
 立即注册

QQ登录

只需一步,快速开始

KearneyKang 讲师达人认证 悬赏达人认证
超级版主   /  发表于:2020-3-24 12:25  /   查看:2984  /  回复:0
本帖最后由 KearneyKang 于 2020-3-24 12:29 编辑

当把报表ReportID当做一个参数入口进行参数传递,然后后台通过使用Split函数进行一个参数的分割进行数据的筛选。当参数过多或者参数内容过多的时候,会导致导出功能失效,出现一个Not Found的界面

下面我们就来看看具体的解决办法:

把ReportID当做一个参数入口的写法:

TextBox1TextBox2和TextBox3 当做参数输入框,这个可以根据自己的需求进行输入,我这里参数之间的分割使用的是;
  1. report: {
  2.                         id: 'Reports/SalesDetail.rdlx' + ';' + $("#TextBox1").val()+';' + $("#TextBox2").val()+';' + $("#TextBox3").val()
  3.                     },
复制代码
把reportID当做参数入口的前段代码:

  1. <script type="text/javascript">
  2.         function Search() {
  3.             $(function () {            
  4.                 var viewer = GrapeCity.ActiveReports.Viewer({
  5.                     element: '#viewer',
  6.                     report: {
  7.                         id: 'Reports/SalesDetail.rdlx' + ';' + $("#TextBox1").val()+';' + $("#TextBox2").val()+';' + $("#TextBox3").val()   //报表名称和参数的传递
  8.                     },
  9.                     reportService:
  10.                         {
  11.                             url: 'WebService3.asmx'
  12.                         },
  13.                     uiType: 'Desktop',
  14.                     localeUri: 'Scripts/i18n/Localeuri.txt',
  15.                 });
  16.             })
  17.         };                  
  18. </script
复制代码
后台代码
  1. <blockquote>public class WebService3 : GrapeCity.ActiveReports.Web.ReportService
复制代码
  1. public class WebService3 : GrapeCity.ActiveReports.Web.ReportService
  2.     {

  3.         PageDocument _pageDocument;
  4.         PageReport definition;
  5.         public static string name = "";
  6.         public static string city = "";
  7.         [WebMethod]
  8.         protected override object OnCreateReportHandler(string reportAndParams)
  9.         {
  10.             string reportName = reportAndParams.Split(';')[0];
  11.             name = reportAndParams.Split(';')[1];
  12.             city = reportAndParams.Split(';')[2];
  13.             definition = (PageReport)base.OnCreateReportHandler(reportName);
  14.             _pageDocument = new PageDocument(definition);
  15.             definition.Document.LocateDataSource += new LocateDataSourceEventHandler(DataSource1);
  16.             return definition;
  17.         }
  18.         void DataSource1(object sender, LocateDataSourceEventArgs args)//只加载了LocateDataSource方法一次
  19.         {


  20.             string connStr = Server.MapPath("/Data/NWind_CHS.mdb");
  21.             DataTable dt = new DataTable();

  22.             Access dl = new Access(connStr);
  23.             string nameone = name;
  24.             string Id = city;
  25.             if (Id != "" && nameone != "")
  26.             {
  27.                 string productSql = string.Format("select 订单.* from 订单 where 货主名称='{0}' and 货主城市='{1}'", nameone, Id);
  28.                 args.Data = dl.ExecuteDataset(productSql);

  29.             }
  30.             if (nameone != "" && Id == "")
  31.             {
  32.                 string productSql = string.Format("select 订单.* from 订单 where 货主名称='{0}' ", nameone);
  33.                 dt = dl.ExecuteDataset(productSql);
  34.                 args.Data = dl.ExecuteDataset(productSql);
  35.             }
  36.             if (nameone == "" && Id != "")
  37.             {
  38.                 string productSql = string.Format("select 订单.* from 订单 where 货主城市='{0}' ", Id);
  39.                 dt = dl.ExecuteDataset(productSql);
  40.                 args.Data = dl.ExecuteDataset(productSql);
  41.             }
  42.             if (nameone == "" && Id == "")
  43.             {
  44.                 string productSql = string.Format("select 订单.* from 订单 ");
  45.                 dt = dl.ExecuteDataset(productSql);
  46.                 args.Data = dl.ExecuteDataset(productSql);
  47.             }
  48.             //else
  49.             //{
  50.             //    args.Data = null;
  51.             //}
  52.         }
  53.     }
复制代码

参数传递获取这块我就这样简单一说
下面来说说如何调整对应的JS文件,来解决导出的问题
1、找到GrapeCity.ActiveReports.Viewer.Html.js文件

2、找到JS文件里导出属性设置内容

3、修改导出报表的名称FileName
我这边是根据自己的需求使用芬根函数来获取真正的报表名称:FileName:viewer.report().reportName.split(';')[0]

4、就这样设置修改导出报表的名称就可以解决你的问题。

本帖子中包含更多资源

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

x

0 个回复

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