新年刚来,就遇到一棘手问题:水晶报表打印、导出时均出现错误提示:未能使用您指定的选项导出。请检查选项并重试。
将报表rpt文件重新画了一遍,代码检查了一遍,均没有发现问题。
我的程序是让用户选择输出“柱状”图还是“饼状”图,如图所示:
代码根据用户的选择进行分析然后导入相应的报表文件,如下代码:
if (TuBiaoLeiXing == "柱状")
{
this.CryReportLoad("~/rpt/multiDishiWxyCrp.rpt", ds);
}
else if (TuBiaoLeiXing == "饼状")
{
this.CryReportLoad("~/rpt/cakyWxyCrp.rpt", ds);
}
{
this.CryReportLoad("~/rpt/multiDishiWxyCrp.rpt", ds);
}
else if (TuBiaoLeiXing == "饼状")
{
this.CryReportLoad("~/rpt/cakyWxyCrp.rpt", ds);
}
CryReportLoad是我的导入报表数据并显示的函数。
分析:
报表显示正常,就是导出或者打印时才会出现错误提示,根据提示,觉得的是报表在导出或者打印时,找不到相应的数据。因为报表在导出或者打印数据时,另外弹出一窗口,因此很有可能是TuBiaoLeiXing 这个参数的值根本取不到或者取到的也是“垃圾”数据。
由以上分析,我重点测试了TuBiaoLeiXing 这个变量的值,这个值我用隐藏域进行传值,发现在导出或者打印时,它的值变成了乱码了,而并不是程序所期待的值“柱状”或者“饼状”,因此,导出或者打印出现找不到报表数据的错误就理所当然了,呵呵。
为了证实我的想法,将上述代码的判断去掉,即不管用户选择什么,我都将其认为是柱状图形,即:去掉程序判断,直接用代码“this.CryReportLoad("~/rpt/multiDishiWxyCrp.rpt", ds);”来替代它。运行后一切正常。
为什么在导出或者打印时变量的值变成了乱码了呢,我怀疑是编码的问题了,因为web.config里设置的编码为gb2312,而微软的水晶报表导出或者打印时的页面语言为utf8,因此造成了汉字的乱码了,从而不认识程序所传递的变量:“柱状”或者“饼状”了。
OK,找到原因,解决的方法有很多,我在这里用session来保存这个变量,防止变量丢失或者因为编码问题而出错。




Crystal Reports





此内容无附件