当前位置:编程学习 > C#/ASP.NET >>

水晶报表连续打印报错


我在一个按钮事件中多次打印报表报错,代码如下:

  printtj.phb phb = new jyhnt.printtj.phb(); //实例化报表
  hgz.SetDataSource(tb_phb);//数据源
  phb.PrintToPrinter(dy_fs, false, 0, 0);//打印 指定份数
  phb.Dispose(); //关闭

  printtj.hgz hgz = new jyhnt.printtj.hgz();
  hgz.SetDataSource(tb_phb);
  hgz.PrintToPrinter(dy_fs, false, 0, 0);//打印 指定份数
  hgz.Dispose(); //关闭

   printtj.jhl jhl = new jyhnt.printtj.jhl();
   jhl.SetDataSource(tb_phb);
   jhl.PrintToPrinter(dy_fs, false, 0, 0);//打印 指定份数
   jhl.Dispose(); //关闭
.........
........
一共有8个报表 报错如下:
CrystalDecisions.CrystalReports.Engine.FormattingException: 
文件 C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp1\temp_d0489b01-c22c-4d06-bbb6-dd032f9c75da {29468583-CC50-475D-98F6-FE7550223C41}.rpt 内出错:
页眉或页脚超过了一页。 ---> System.Runtime.InteropServices.COMException (0x80000237): 
文件 C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp1\temp_d0489b01-c22c-4d06-bbb6-dd032f9c75da {29468583-CC50-475D-98F6-FE7550223C41}.rpt 内出错:
页眉或页脚超过了一页。


请问如何解决 --------------------编程问答-------------------- 没人知道吗 --------------------编程问答-------------------- 1:你先用排除法定位下到底是哪个报表在打印时出错了
2:从“页眉或页脚超过了一页”这个信息上看,应该是页面的大小超出了实际的纸型大小,可能需要对模板进行修改
你找到具体的报表后,先把页眉和页脚抑制显示掉看下能不能正常打印,应该是各个节组合起来的高度大于实际纸型的高度了。 --------------------编程问答-------------------- 我估计是连续打印出的问题 不是报表的事 因为我用报表查看器装载单独打印都没问题 --------------------编程问答-------------------- 试试看,至少你要定位到时哪张出了问题。 --------------------编程问答-------------------- 是不是我的写法有问题 
 printtj.phb phb = new jyhnt.printtj.phb(); //实例化报表
  hgz.SetDataSource(tb_phb);//数据源
  phb.PrintToPrinter(dy_fs, false, 0, 0);//打印 指定份数
  phb.Dispose(); //关闭

  printtj.hgz hgz = new jyhnt.printtj.hgz();
  hgz.SetDataSource(tb_phb);
  hgz.PrintToPrinter(dy_fs, false, 0, 0);//打印 指定份数
  hgz.Dispose(); //关闭

  printtj.jhl jhl = new jyhnt.printtj.jhl();
  jhl.SetDataSource(tb_phb);
  jhl.PrintToPrinter(dy_fs, false, 0, 0);//打印 指定份数
  jhl.Dispose(); //关闭
--------------------编程问答-------------------- 我刚才试过了 把代码分别写到每个窗体就没问题 如下
 调用打印窗体 
 printtj.dyphb dy = new jyhnt.printtj.dyphb();
 dy.tb_phb = tb_phb;//传递数据
 dy.show()
打印窗体代码如下 
 phb phb = new phb();//实例化
 phb.SetDataSource(tb_phb);//数据
 phb.PrintToPrinter(1, false, 0, 0); //打印
 this.Close(); //关闭

第二个窗体 

.....


第三个 
...


可是我觉得这样有点麻烦 不知道错在哪 






--------------------编程问答-------------------- 有人知道吗?
phb.PrintToPrinter(dy_fs, false, 0, 0);//打印 指定份数

phb.PrintToPrinter(dy_fs, false, 0, 0);//打印 指定份数

phb.PrintToPrinter(dy_fs, false, 0, 0);//打印 指定份数
这样连续的打印就报错 页眉和页脚超过一页 --------------------编程问答-------------------- 如果数据样本一样,单独打印可以的话,那还真有点想不出原因
会不会是打印机响应不过来呢,呵呵。
你把份数设置为1,降低打印的频度试试? --------------------编程问答-------------------- 连续打印,看看有没有设置好默认打印机,单独打印可以选择打印机,连续打印时只用默认打印机。
补充:.NET技术 ,  图表区
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,