博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
『水晶报表』使用 水晶报表 实现打印
阅读量:5931 次
发布时间:2019-06-19

本文共 3627 字,大约阅读时间需要 12 分钟。

  hot3.png

在我们开发各种工具软件的时候,我们不可避免的会遇到打印的问题。而使用.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样式

 

Form1

using System.Windows;// 引入可以访问 app.config 中的项 using System.Drawing.Printing;// 打印必须 namespace csdemo.reportdemo { ///   /// MainWindow.xaml 的交互逻辑  ///   public partial class MainWindow: Window {  public MainWindow() {    InitializeComponent();   }   ///     /// 获取可用打印机    ///     ///     ///    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;   }   ///     /// 打印机名称   ///    private string _printerName = string.Empty;  ///    /// 设置打印机  ///    ///   ///    private void button2_Click(object sender, RoutedEventArgs e) {    _printerName = comboBox1.SelectedValue.ToString();   }   ///     /// 调用打印    ///    ///    ///    private void button3_Click(object sender, RoutedEventArgs e) {   PrintWindow pw = new PrintWindow();   pw.printerName = _printerName;   pw.Show();   pw.Close();  } }}

Form2

using System.Windows;using System.Data.SqlClient;using CrystalDecisions.CrystalReports.Engine;namespace csdemo.reportdemo { ///   /// PrintWindow.xaml 的交互逻辑  ///   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」下找不到,之后我到它的上级目录拷贝了相关的文件过去就好了~

 

参考网摘:

转载于:https://my.oschina.net/skyler/blog/706178

你可能感兴趣的文章
flexbox父盒子justify-content属性
查看>>
逆向脱壳附加数据处理
查看>>
阿里云启用IPV6
查看>>
intelliJ 打包jar的多种方式
查看>>
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
查看>>
Oracle RAC 实验环境RMAN备份v1.01
查看>>
ControlTemplate in WPF —— ItemsControl
查看>>
把表单转成json,并且name为key,value为值
查看>>
kotlin for android----------MVP模式实现登录
查看>>
.net FrameWork各个版本之间的发展[转]
查看>>
织梦CMS搭建网站必做的服务器相关安全设置
查看>>
张高兴的 Windows 10 IoT 开发笔记:BH1750FVI 光照度传感器
查看>>
SQL Server 服务器主体拥有一个或多个端点无法删除;错误15141
查看>>
Linux-echo、cat命令详解(14)
查看>>
B-树的插入、查找、删除
查看>>
什么是音频视频比特率,采样率,讲的很不错
查看>>
WebApi系列~HttpClient的性能隐患
查看>>
【微信小程序】再次授权地理位置getLocation+openSetting使用
查看>>
Jsp页面,结果集分页和sql(top)分页的性能对比
查看>>
ML之监督学习算法之分类算法一 ——— 决策树算法
查看>>