KearneyKang 发表于 2020-3-24 12:25:17

报表ReportID名称过长导致报表无法导出

本帖最后由 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.ReportServicepublic class WebService3 : GrapeCity.ActiveReports.Web.ReportService
    {

      PageDocument _pageDocument;
      PageReport definition;
      public static string name = "";
      public static string city = "";
      
      protected override object OnCreateReportHandler(string reportAndParams)
      {
            string reportName = reportAndParams.Split(';');
            name = reportAndParams.Split(';');
            city = reportAndParams.Split(';');
            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(';')
4、就这样设置修改导出报表的名称就可以解决你的问题。
页: [1]
查看完整版本: 报表ReportID名称过长导致报表无法导出