CanYou8 发表于 2016-3-21 14:57:01

如何实现批量预览/打印的功能?

本帖最后由 Lenka.Guo 于 2016-3-28 15:49 编辑

    常规来讲,点击一次按钮,打开一个预览窗口,然后打印出来。
    我们遇到的问题是,需要不停的重复这么一个过程: 点击按钮→预览→打印。能否实现这样的效果,点击一个按钮,在同一个窗口预览多个报表的内容,之后打印这些报表出来?就是说,将多次点击按钮,整合成一次点击,一次性预览原来的多个报表内容,而打印出来的效果,与上面多次重复【点击按钮→预览→打印】过程所打印出来的内容一样?

Lenka.Guo 发表于 2016-3-21 17:21:58

如电话所沟通:正在寻找解决方法,如有反馈会立即回复您

cskg0001 发表于 2016-3-24 19:00:41

关注!!!我也遇到过这中情况,比如一个发货单的打印报表,只能打印某一个具体编号的发运信息
我后来是这样解决的,供参考
1,原始的报表的SQL 语句可能是select * from AAAA where 发运单编号='NO00001'
2 , 修改报表或者新增一个发货单报表,要有按发运单编号的进行分组设置(换页)
同时 修改SQL   select * from AAAA where 发运单编号 in ('NO00001','NO00002','NO00003'...)
   in 后面的内容可以传递进去,这样的话,预览直接可以看到你需要看的那几张发运单。
当然,如果直接打印可能会出现问题(比如页数/页码不正确)
3,最后修改Viewer工具菜单的按钮,移除原来的打印按钮,然后新增一个打印按钮关联到
一个你自己的函数上,这个函数就是把你要的报表循环打印,一个一个的直接打印,不预览

CanYou8 发表于 2016-3-24 22:52:31

本帖最后由 CanYou8 于 2016-3-24 22:54 编辑

cskg0001 发表于 2016-3-24 19:00
关注!!!我也遇到过这中情况,比如一个发货单的打印报表,只能打印某一个具体编号的发运信息
我后来是这 ...
1.传多个参数,修改SQL语句为In子句来实现,确实是一个很好的思路;但是这样可能有个限制,那就是业务逻辑过程要相对简单。我现在需要打印的这个报表,涉及到数据库中的十几张表,在RDL报表中我已经定义了12个数据集,用了9个Table、6个文本框来显示这些内容——将来可能还会更多。这样再用分组就很麻烦了。
2.能否说下您那边如何来自定义函数,实现将报表循环打印出来的功能的?我这边是WPF平台, 不知道能不能实现这样的功能?

Lenka.Guo 发表于 2016-3-25 09:25:50

cskg0001 发表于 2016-3-24 19:00
关注!!!我也遇到过这中情况,比如一个发货单的打印报表,只能打印某一个具体编号的发运信息
我后来是这 ...

感谢您的分享~~奖励1000金币~~

cskg0001 发表于 2016-3-25 20:31:53

1.因为你说是要批量打印,我的第一印象是某种凭证的打印,而不是相对复杂的统计分析报表。
而对于凭证,一般都有主要的关键编号,然后再根据关键编号来获取相关数据来打印报表
向我上面举得列子( 发运单),其实也要连接5-6个数据表的。
你说要连接10多个表,是比较复杂的,但我认为这些表肯定有相关性的,不然也不会在一张报表打印出来。
你能说说你的报表的功能,是怎么的数据格式,大家可以一起学习。
2.我现在是winform平台,wpf没用过,所以不知道区别有多大。我就说下winform的
   我现在的每个报表都是设计成一个函数来实现
   发运单报表的函数public funtion Xs_Print发运单(vFydbh as string)aspagedocument
   vFydbh就是报表的主编号,根据这个编号就可以生成对应的报表
   在任何需要打印发运单的地方,直接调用这个函数,就能得到已经生成好的PageReportDocument
   按照实际情况直接打印或者预览(多个报表只是个循环)
3.Ar报表的预览控件viewer的工具条是可以控制的,但你不能修改他对应的代码,所以有个变通的办法
   把viewer上工具条的打印这个按钮隐藏,在同一位置插入一个按钮,这个按钮用 AddHandle 方法关联你实现打印功能的函数

Lenka.Guo 发表于 2016-3-28 15:48:35

cskg0001 发表于 2016-3-25 20:31
1.因为你说是要批量打印,我的第一印象是某种凭证的打印,而不是相对复杂的统计分析报表。
而对于凭证, ...

非常赞~~ActiveReports 专家呀~~奖励1000金币~~绝对的干货~希望对CanYou8能够有用:lol~~

CanYou8 发表于 2016-3-28 22:02:05

本帖最后由 CanYou8 于 2016-3-28 22:09 编辑

非常感谢!
“得到已经生成好的PageReportDocument按照实际情况直接打印或者预览(多个报表只是个循环)”,这里如何直接打印?如果可以打印PageReportDocument,那么批量打印就可以简单抽象为循环打印多个PageReportDocument——可是我一直没找到对应的方法。我这边之前的打印都是调用GrapeCity.ActiveReports.Viewer.Wpf.Print()方法,不知道WPF是否支持?

Lenka.Guo 发表于 2016-3-29 10:07:08

cskg001给出的方法大致分为两步:
1. 构造打印报表的函数,UserId为例作为参数传递:
Public PageReport PrintReport(string UserID)
{
Report=New Report();
Report.Parameter.Value=UserID;
returnReport;
}

2. 在主程序中,循环调用生成报表的函数:
Array[] UserID;
for(i=0;i<UserID.length;i++)
{
PageReport=PrintReport(UserID);
print();

}



CanYou8 发表于 2016-3-29 13:36:40

Lenka.Guo 发表于 2016-3-29 10:07
cskg001给出的方法大致分为两步:
1. 构造打印报表的函数,UserId为例作为参数传递:
Public PageReport...

我明白这个思路,请问能否细化一下print(); 这个步骤?
页: [1] 2
查看完整版本: 如何实现批量预览/打印的功能?