在我们开发各种工具软件的时候,我们不可避免的会遇到打印的问题。而使用.NET开发打印功能,水晶报表或许会是一个十分不象错的选择!

一般步骤:

  1. 准备好想要打印的数据源;
  2. 制作用于规定打印结果样式的模板文件(.rpt);
  3. 创建用于打印的执行窗口Form1,并在其中放置一个CrystalReportViewer  (第三方控件,来自SAP)
  4. 创建打印按键所在的Form2;
  5. 获取系统所能使用的打印机;
  6. 设置使用的打印机,及打印相关参数;
  7. 使用Form2调用Form1完成打印。

水晶报表的一般概念

水晶报表的两种模式:

  1. 拉 PULL:设置好数据连接之后,使用水晶报表文件中所使用的获得数据的方式,由水晶报表自己解决数据获取操作。
  2. 推 PUSH:使用DataSet装载数据,然后填充到水晶报表中,再按照水晶报表的格式来展示。

相关控件:

  1. CrystalReportViewer    「数据展示者」「ASP.NET & WinForm」
  2. CrystalReportSource   「数据提供者」「ASP.NET」
  3. CrystalReport                「数据提供者」「WinForm」

命名空间:

  1. CrystalDecisions.Shared
  2. CrystalDecisions.CrystalReports.Engine

相关成员:

类名 成员名 描述
CrystalReport Load 加载水晶报表(.rpt)文件
  SetDatabaseLogon 设置数据库连接,PULL中会用到
  SetParameterValue 设置报表值
     
CrystalReportViewer ReportSource 设置报表数据源
  DataBind 绑定数据源
     
CrystalReportSource ReportDocument.Load 加载水晶报表(.rpt)文件,Server.MapPath("*********.rpt")
  ReportDocument.SetDatabaseLogon 设置数据库连接,PULL中会用到
  ReportDocument.SetParameterValue 设置报表值
     

具体实现

打印模板文件样式

Form2样式

using System.Windows;
// 引入可以访问 app.config 中的项
using System.Drawing.Printing;  // 打印必须namespace csdemo.reportdemo
{/// <summary>/// MainWindow.xaml 的交互逻辑/// </summary>public partial class MainWindow : Window{public MainWindow(){InitializeComponent();}/// <summary>/// 获取可用打印机/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void button1_Click(object sender, RoutedEventArgs e){comboBox1.Items.Clear();foreach (var item in PrinterSettings.InstalledPrinters){comboBox1.Items.Add(item.ToString());}comboBox1.SelectedIndex = 0;}/// <summary>/// 打印机名称/// </summary>private string _printerName=string.Empty;/// <summary>/// 设置打印机/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void button2_Click(object sender, RoutedEventArgs e){_printerName = comboBox1.SelectedValue.ToString();}/// <summary>/// 调用打印/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void button3_Click(object sender, RoutedEventArgs e){PrintWindow pw = new PrintWindow();pw.printerName = _printerName;pw.Show();pw.Close();}}
}

using System.Windows;
using System.Data.SqlClient;
using CrystalDecisions.CrystalReports.Engine;namespace csdemo.reportdemo
{/// <summary>/// PrintWindow.xaml 的交互逻辑/// </summary>public partial class PrintWindow : Window{public PrintWindow(){InitializeComponent();Data_Binding();}public string printerName = string.Empty;private void Data_Binding(){System.Data.DataSet ds = new System.Data.DataSet();SqlConnection conn = new SqlConnection();conn.ConnectionString = @"Data Source=192.168.0.196;Initial Catalog=NewEMaxTest;Persist Security Info=True;User ID=sa;Password=qwerta";conn.Open();string cmd = "select * from TBusRetail";SqlDataAdapter da = new SqlDataAdapter(cmd, conn);da.Fill(ds, "TBusRetail");conn.Close();string pathRpt = @"D:\Projects\csdemo\branches\csdemo2010\csdemo.reportdemo\ReportFile\DemoCrystalReport.rpt";// ****************************************************ReportDocument repostDoc = new ReportDocument();repostDoc.Load(pathRpt);                    // 加载打印模板文件repostDoc.SetDataSource(ds);                // 设置数据源repostDoc.PrintOptions.PrinterName = printerName;   // 设置打印机名称repostDoc.PrintOptions.PaperSize = CrystalDecisions.Shared.PaperSize.PaperA4;   // 设置打印纸张样式repostDoc.PrintOptions.PaperOrientation = CrystalDecisions.Shared.PaperOrientation.DefaultPaperOrientation;repostDoc.PrintToPrinter(1, false, 1, 1);   // 只打印一页,不核对,从第 0 页打印到第0页// ****************************************************// 如果要显示数据的话,就可以使用这个来在Viwer中绑定数据源了。// crv.ViewerCore.ReportSource = repostDoc;}}
}

注意:

  1. 在使用VS2010配合水晶报表时,需要更改工程的目标框架为「.NET Framework 4」不然会出现错误。
  2. 我在使用的时候,不知道是不是我个人机器的原因,一真会提示有一个文件在「dotnet1」下找不到,之后我到它的上级目录拷贝了相关的文件过去就好了~

参考网摘:

  1. C#水晶报表教程
  2. C#实现打印功能

转载于:https://www.cnblogs.com/zhaoshujie/p/9594753.html

『水晶报表』实现打印相关推荐

  1. 水晶报表A4纸打印两张中一刀凭证

    现在很多时候都会遇到 水晶报表A4纸打印两张中一刀凭证 单头如下: numbervar firstRecordOfGroup; //numbervar lastRecordOfGroup; //将每组 ...

  2. 【canvas】网易云音乐鲸云动效『水晶音波』的简单实现

    最近闲来无事,打开网易云音乐,发现还有鲸云音效这种东西,嗯?『水晶音波』,挺炫.嗯?黑胶VIP专享?(其实我已经是黑胶VIP)好像实现起来也不很复杂呀,所以花了一下午,实现了一个简单版本. 这是网易云 ...

  3. 水晶报表2008 条码打印 扫描

    前几天项目上用到了水晶报表的条码打印功能 最开始用的字体,code39 code128都试了,可以正常打印,但是扫描枪不识别, 据说code39值两边加*可以扫描到,我没能成功 又在网上找到以下方法, ...

  4. 水晶报表提示“出现打印错误。将停止打印”的原因,非page_Init

    在水晶报表安装完printControl.cab后,弹出选择打印机的界面后,点确定按钮提示"出现打印错误.将停止打印",这可把我郁闷了,到网上一搜,无法就是page_Init里也需 ...

  5. 水晶报表 动态批量打印本地图片

    目的:从数据库中得到本地图片的路径,再将其打印到报表上,每一个ID查询出来的信息(包括多幅图片)对应报表中的一页 环境:VS2005+自带水晶报表 参考文献:http://babyt.cnblogs. ...

  6. access数据库使用水晶报表(PUSH)推模式实现多数据源含子报表的订单打印

    最近改造一个小型购物网站,要求使用水晶报表实现订单打印,本人对水晶报表从一无所知到,到最终弄出来整整花了一夜的时间,特此记录下此文和大家共享. 关于水晶报表更详细的介绍建议大家可以参考阿泰的博客:ht ...

  7. 水晶报表报表条码的处理方法

    之前找了N多资料都没有一个完整的实现办法,现在整理完整的实现办法,: 一.用水晶报表做表时: 1.做表电脑安装字体:code128\C39HrP24DhTt 2.设置水晶报表,将要打印为条码的字体设置 ...

  8. 水晶报表导出数据并实现打印

    要在里一个页面上进行操作 ReportDocument rdocument = new ReportDocument(); //公用打印方法     ExportCrystalL ExCrystal ...

  9. C#实现水晶报表绑定数据并实现打印

    步骤: 1.新建一个数据集,然后将数据库里面的表托放到DataSet2.xsd里面 2.新建一个水晶报表,根据向导完成水晶报表的制作,效果图如下: 3.新建一个WINDOWS窗体,并在窗体里面放置一个 ...

  10. 水晶报表工具栏出现红叉叉无法打印导出等问题的解决方法

    常见场景: 使用WebForm方式开发水晶报表应用,在本机调试一切正常.但是发布到服务器上以后,报表可以正确显示. 但是工具栏上的图标却成了红叉叉,无法执行打印.导出操作,页面提示有脚本错误. 解决方 ...

最新文章

  1. windows 系统无法启动windows event log 服务
  2. 计算机三级网络技术题库第15套,第15套 上机操作题
  3. WSS学习(一)---简单部署图
  4. html5执行shell,利用nginx执行Shell 脚本
  5. python-opencv使用摄像头
  6. 安装jdk配置环境变量JAVA_HOME不起作用
  7. 力扣——在排序数组中查找元素的第一个和最后一个位置
  8. java after 函数_函数周期表丨信息丨值丨ISONORAFTER
  9. Android Hessian 通信
  10. 阿里云oss 简单上传
  11. linux进程线程-alarm闹钟函数
  12. bitcoin全节点搭建
  13. 一元三次方程求解matlab_浅谈三次函数的性质及其在高考中的应用
  14. 不要为明天忧虑(10.14)
  15. 程序员的价值观与网络的复杂性
  16. 微信小程序截屏保存图片
  17. 计算机与生物科学结合的论文,生物信息学论文范文
  18. 还在用开发者工具上传小程序? 快来试试 miniprogram-ci 提效摸鱼
  19. 读取超大json文件中数据格式的方法
  20. 用js动态改变css样式表(亲测可以)

热门文章

  1. zabbix通过jmx监控jdbc连接池的各项指标
  2. 【月伴流星】Windows7 SP1_x86/x64多合一安装版2019.08
  3. “耐撕”团队第一次讨论——“抢答器”需求分析
  4. 计算机网络工程师中级软考试题及答案,软考中级历年真题+章节题库
  5. Java实现文件或文件夹的复制到指定目录
  6. 页面调用微信扫一扫功能
  7. stm32固件库文件
  8. 离散数学(第五版) 迪杰斯特拉(Dijkstra)算法计算图画法流程
  9. 鸡啄米VS2010/MFC编程入门教程——学习3(安装VS2010)
  10. 海康威视C++应用软件开发面经