『水晶报表』实现打印
在我们开发各种工具软件的时候,我们不可避免的会遇到打印的问题。而使用.NET开发打印功能,水晶报表或许会是一个十分不象错的选择!
一般步骤:
- 准备好想要打印的数据源;
- 制作用于规定打印结果样式的模板文件(.rpt);
- 创建用于打印的执行窗口Form1,并在其中放置一个CrystalReportViewer (第三方控件,来自SAP)
- 创建打印按键所在的Form2;
- 获取系统所能使用的打印机;
- 设置使用的打印机,及打印相关参数;
- 使用Form2调用Form1完成打印。
水晶报表的一般概念
水晶报表的两种模式:
- 拉 PULL:设置好数据连接之后,使用水晶报表文件中所使用的获得数据的方式,由水晶报表自己解决数据获取操作。
- 推 PUSH:使用DataSet装载数据,然后填充到水晶报表中,再按照水晶报表的格式来展示。
相关控件:
- CrystalReportViewer 「数据展示者」「ASP.NET & WinForm」
- CrystalReportSource 「数据提供者」「ASP.NET」
- CrystalReport 「数据提供者」「WinForm」
命名空间:
- CrystalDecisions.Shared
- 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;}} }
注意:
- 在使用VS2010配合水晶报表时,需要更改工程的目标框架为「.NET Framework 4」不然会出现错误。
- 我在使用的时候,不知道是不是我个人机器的原因,一真会提示有一个文件在「dotnet1」下找不到,之后我到它的上级目录拷贝了相关的文件过去就好了~
参考网摘:
- C#水晶报表教程
- C#实现打印功能
转载于:https://www.cnblogs.com/zhaoshujie/p/9594753.html
『水晶报表』实现打印相关推荐
- 水晶报表A4纸打印两张中一刀凭证
现在很多时候都会遇到 水晶报表A4纸打印两张中一刀凭证 单头如下: numbervar firstRecordOfGroup; //numbervar lastRecordOfGroup; //将每组 ...
- 【canvas】网易云音乐鲸云动效『水晶音波』的简单实现
最近闲来无事,打开网易云音乐,发现还有鲸云音效这种东西,嗯?『水晶音波』,挺炫.嗯?黑胶VIP专享?(其实我已经是黑胶VIP)好像实现起来也不很复杂呀,所以花了一下午,实现了一个简单版本. 这是网易云 ...
- 水晶报表2008 条码打印 扫描
前几天项目上用到了水晶报表的条码打印功能 最开始用的字体,code39 code128都试了,可以正常打印,但是扫描枪不识别, 据说code39值两边加*可以扫描到,我没能成功 又在网上找到以下方法, ...
- 水晶报表提示“出现打印错误。将停止打印”的原因,非page_Init
在水晶报表安装完printControl.cab后,弹出选择打印机的界面后,点确定按钮提示"出现打印错误.将停止打印",这可把我郁闷了,到网上一搜,无法就是page_Init里也需 ...
- 水晶报表 动态批量打印本地图片
目的:从数据库中得到本地图片的路径,再将其打印到报表上,每一个ID查询出来的信息(包括多幅图片)对应报表中的一页 环境:VS2005+自带水晶报表 参考文献:http://babyt.cnblogs. ...
- access数据库使用水晶报表(PUSH)推模式实现多数据源含子报表的订单打印
最近改造一个小型购物网站,要求使用水晶报表实现订单打印,本人对水晶报表从一无所知到,到最终弄出来整整花了一夜的时间,特此记录下此文和大家共享. 关于水晶报表更详细的介绍建议大家可以参考阿泰的博客:ht ...
- 水晶报表报表条码的处理方法
之前找了N多资料都没有一个完整的实现办法,现在整理完整的实现办法,: 一.用水晶报表做表时: 1.做表电脑安装字体:code128\C39HrP24DhTt 2.设置水晶报表,将要打印为条码的字体设置 ...
- 水晶报表导出数据并实现打印
要在里一个页面上进行操作 ReportDocument rdocument = new ReportDocument(); //公用打印方法 ExportCrystalL ExCrystal ...
- C#实现水晶报表绑定数据并实现打印
步骤: 1.新建一个数据集,然后将数据库里面的表托放到DataSet2.xsd里面 2.新建一个水晶报表,根据向导完成水晶报表的制作,效果图如下: 3.新建一个WINDOWS窗体,并在窗体里面放置一个 ...
- 水晶报表工具栏出现红叉叉无法打印导出等问题的解决方法
常见场景: 使用WebForm方式开发水晶报表应用,在本机调试一切正常.但是发布到服务器上以后,报表可以正确显示. 但是工具栏上的图标却成了红叉叉,无法执行打印.导出操作,页面提示有脚本错误. 解决方 ...
最新文章
- windows 系统无法启动windows event log 服务
- 计算机三级网络技术题库第15套,第15套 上机操作题
- WSS学习(一)---简单部署图
- html5执行shell,利用nginx执行Shell 脚本
- python-opencv使用摄像头
- 安装jdk配置环境变量JAVA_HOME不起作用
- 力扣——在排序数组中查找元素的第一个和最后一个位置
- java after 函数_函数周期表丨信息丨值丨ISONORAFTER
- Android Hessian 通信
- 阿里云oss 简单上传
- linux进程线程-alarm闹钟函数
- bitcoin全节点搭建
- 一元三次方程求解matlab_浅谈三次函数的性质及其在高考中的应用
- 不要为明天忧虑(10.14)
- 程序员的价值观与网络的复杂性
- 微信小程序截屏保存图片
- 计算机与生物科学结合的论文,生物信息学论文范文
- 还在用开发者工具上传小程序? 快来试试 miniprogram-ci 提效摸鱼
- 读取超大json文件中数据格式的方法
- 用js动态改变css样式表(亲测可以)
热门文章
- zabbix通过jmx监控jdbc连接池的各项指标
- 【月伴流星】Windows7 SP1_x86/x64多合一安装版2019.08
- “耐撕”团队第一次讨论——“抢答器”需求分析
- 计算机网络工程师中级软考试题及答案,软考中级历年真题+章节题库
- Java实现文件或文件夹的复制到指定目录
- 页面调用微信扫一扫功能
- stm32固件库文件
- 离散数学(第五版) 迪杰斯特拉(Dijkstra)算法计算图画法流程
- 鸡啄米VS2010/MFC编程入门教程——学习3(安装VS2010)
- 海康威视C++应用软件开发面经