报表有2个非常重要的外延功能:打印、导出。本文就通过2个报表实战例子说明之。
首先,在使用 ActiveReports 报表控件实现发票打印、发货单打印、物流清单打印、商品条码印刷、员工工卡印刷之类的功能时,您只需在设计报表阶段加载套打纸作为报表背景图片,实际打印时仅将数据打印到套打纸的相应位置。 另外,ActiveReports 支持多种格式的报表导出,包括PDF、Excel、Word、RTF、HTML、Text、TIFF以及其它图片格式,您可以将它们应用到Windows Forms、Web、WPF、Silverlight等应用系统中。
实战报表1:常规报表--套打报表--发货运单
ActiveReports 中首创的一种 .NET报表模型,运行时的报表页面与设计时完全保持一致,各控件的位置和大小都不会改变,非常适合创建传统的纸质报表格式,如用于设计财务单据、银行帐票等格式要求严格的报表。
《ActiveReports 报表应用教程 (5)---解密电子商务领域首张电子发票的诞生(套打报表)》,1年前的这篇博客中,我们通过代码实现报表的套打功能:在设计报表阶段加载套打纸作为报表背景图片,实际打印时仅将数据打印到套打纸的相应位置。 而从ActiveReports9开始,我们提供的报表分层设计理念几乎不用写代码,即可实现类似逻辑,这个对实际使用报表实现套打来说,还是很方便的。
备注:创新的报表分层设计理念是对报表中不同控件进行分组管理和设计,可对同组内的全部控件进行锁定/解锁,添加/删除,显示/隐藏,调整透明度等操作,降低复杂报表模板的设计难度。同时,通过报表层提供的不同设备上的可见性设置选项, 包括:预览显示、打印显示、导出显示,以及这三种选项的任意组合,可零编码实现一式多份、报表套打等中国式报表需求。
Step 1: 添加rptWayBill2.rdlx报表模板
Step 2:添加报表数据源
OrderDetail的SQL:
SELECT TOP 5 订单.订单ID, 订单.货主名称, 订单.货主城市, 订单.货主地址, 订单.货主邮政编码, 客户.公司名称, 运货商.公司名称, 客户.电话
FROM (订单 INNER JOIN 客户 ON 订单.客户ID = 客户.客户ID) INNER JOIN 运货商 ON 订单.运货商 = 运货商.运货商ID
WHERE 订单.运货商 = 3 AND DatePart("yyyy",订单.订购日期) = 2012;
Shippers的SQL:
select * from 运货商
Step 3:设计报表的分层
Visual Studio的菜单:视图--其他窗口--层列表 V9
其中,层的核心是每个层的TargetDevice属性,这个属性决定了这个层的控件、数据是否可预览、导出、打印。
- Screen:预览可见层
- Paper:打印可见层
- Export:导出可见层
Step 4:设计报表背景
报表添加完成之后,在报表资源管理器中的【嵌入式图像】节点中添加增值税发票背景图片
报表的背景图片,仅在报表的预览和导出层可见,这样的设计实现了套打。
Step 5:设计报表数据字段
实战报表2:常规报表--报表导出
ActiveReports 支持多种格式的报表导出,包括PDF、Excel、Word、RTF、HTML、Text、TIFF以及其它图片格式,用户可以将它们应用到Windows Forms或Web等应用系统中。
Step 1: 添加rptInvoice.rdlx报表模板
Step 2:添加报表数据源
用到的SQL:
SELECT TOP 10 订单.订单ID, 订单.客户ID, 订单.订购日期, 产品.产品名称, 订单明细.数量, 订单明细.单价, 订单明细.折扣, 订单.货主城市, 订单.货主地址, 订单.货主名称, 订单.货主邮政编码, 客户.电话
FROM ((订单 INNER JOIN 订单明细 ON 订单.订单ID = 订单明细.订单ID) INNER JOIN 产品 ON 订单明细.产品ID = 产品.产品ID) INNER JOIN 客户 ON 订单.客户ID = 客户.客户ID
ORDER BY 订单.订购日期 DESC;
Step 3:导出功能
Excel导出的代码:
private void btnExcel_Click(object sender, EventArgs e) { try { dlgSave.Filter = "*.xlsx|.xlsx"; dlgSave.FileName = ""; if (dlgSave.ShowDialog() == DialogResult.OK) { Application.DoEvents(); GrapeCity.ActiveReports.Export.Excel.Section.XlsExport XlsExport1 = new GrapeCity.ActiveReports.Export.Excel.Section.XlsExport(); XlsExport1.FileFormat = GrapeCity.ActiveReports.Export.Excel.Section.FileFormat.Xlsx; XlsExport1.Export(document, dlgSave.FileName); MessageBox.Show("文件已经成功导出!", "", MessageBoxButtons.OK, MessageBoxIcon.Information); } } catch (Exception) { MessageBox.Show("导出文件错误请检查相关设置!", "", MessageBoxButtons.OK, MessageBoxIcon.Error); } finally { Application.DoEvents(); } }
报表导出参考博客: