找回密码
 立即注册

QQ登录

只需一步,快速开始

CanYou8

银牌会员

67

主题

191

帖子

2047

积分

银牌会员

积分
2047

活字格认证微信认证勋章元老葡萄

CanYou8
银牌会员   /  发表于:2016-3-21 14:57  /   查看:7709  /  回复:13
本帖最后由 Lenka.Guo 于 2016-3-28 15:49 编辑

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

13 个回复

倒序浏览
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工具菜单的按钮,移除原来的打印按钮,然后新增一个打印按钮关联到
  一个你自己的函数上,这个函数就是把你要的报表循环打印,一个一个的直接打印,不预览

评分

参与人数 1金币 +1000 收起 理由
Lenka.Guo + 1000 赞一个!

查看全部评分

回复 使用道具 举报
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
5#
cskg0001 发表于 2016-3-24 19:00
关注!!!我也遇到过这中情况,比如一个发货单的打印报表,只能打印某一个具体编号的发运信息
我后来是这 ...

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

评分

参与人数 1金币 +1000 收起 理由
Lenka.Guo + 1000 赞一个!

查看全部评分

回复 使用道具 举报
Lenka.Guo讲师达人认证 悬赏达人认证
超级版主   /  发表于:2016-3-28 15:48:35
7#
cskg0001 发表于 2016-3-25 20:31
1.因为你说是要批量打印,我的第一印象是某种凭证的打印,而不是相对复杂的统计分析报表。
  而对于凭证, ...

非常赞~~ActiveReports 专家呀~~奖励1000金币~~绝对的干货~希望对CanYou8能够有用~~
回复 使用道具 举报
CanYou8
银牌会员   /  发表于:2016-3-28 22:02:05
8#
本帖最后由 CanYou8 于 2016-3-28 22:09 编辑

非常感谢!
“得到已经生成好的PageReportDocument按照实际情况直接打印或者预览(多个报表只是个循环)”,这里如何直接打印?如果可以打印PageReportDocument,那么批量打印就可以简单抽象为循环打印多个PageReportDocument——可是我一直没找到对应的方法。我这边之前的打印都是调用GrapeCity.ActiveReports.Viewer.Wpf.Print()方法,不知道WPF是否支持?
回复 使用道具 举报
Lenka.Guo讲师达人认证 悬赏达人认证
超级版主   /  发表于:2016-3-29 10:07:08
9#
cskg001给出的方法大致分为两步:
1. 构造打印报表的函数,UserId为例作为参数传递:
Public PageReport PrintReport(string UserID)
{
Report=New Report();
Report.Parameter[0].Value=UserID;
return  Report;
}

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

}



回复 使用道具 举报
CanYou8
银牌会员   /  发表于:2016-3-29 13:36:40
10#
Lenka.Guo 发表于 2016-3-29 10:07
cskg001给出的方法大致分为两步:
1. 构造打印报表的函数,UserId为例作为参数传递:
Public PageReport  ...

我明白这个思路,请问能否细化一下  print(); 这个步骤?
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部