报表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]