『水晶報表』使用 水晶報表 實現打印

在咱們開發各類工具軟件的時候,咱們不可避免的會遇到打印的問題。而使用.NET開發打印功能,水晶報表或許會是一個十分不象錯的選擇!html

通常步驟:數據庫

  1. 準備好想要打印的數據源;
  2. 製做用於規定打印結果樣式的模板文件(.rpt);
  3. 建立用於打印的執行窗口Form1,並在其中放置一個CrystalReportViewer  (第三方控件,來自SAP)
  4. 建立打印按鍵所在的Form2;
  5. 獲取系統所能使用的打印機;
  6. 設置使用的打印機,及打印相關參數;
  7. 使用Form2調用Form1完成打印。

 

水晶報表的通常概念

水晶報表的兩種模式:app

  1. 拉 PULL:設置好數據鏈接以後,使用水晶報表文件中所使用的得到數據的方式,由水晶報表本身解決數據獲取操做。
  2. 推 PUSH:使用DataSet裝載數據,而後填充到水晶報表中,再按照水晶報表的格式來展現。

 

相關控件:框架

  1. CrystalReportViewer    「數據展現者」「ASP.NET & WinForm」
  2. CrystalReportSource   「數據提供者」「ASP.NET」
  3. CrystalReport                「數據提供者」「WinForm」

 

命名空間:工具

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

 

相關成員:post

類名 成員名 描述
CrystalReport Load 加載水晶報表(.rpt)文件
  SetDatabaseLogon 設置數據庫鏈接,PULL中會用到
  SetParameterValue 設置報表值
     
CrystalReportViewer ReportSource 設置報表數據源
  DataBind 綁定數據源
     
CrystalReportSource ReportDocument.Load 加載水晶報表(.rpt)文件,Server.MapPath("*********.rpt")
  ReportDocument.SetDatabaseLogon 設置數據庫鏈接,PULL中會用到
  ReportDocument.SetParameterValue 設置報表值
     

 

具體實現

打印模板文件樣式spa

image

Form2樣式code

image

 

Form1orm

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();
  }
 }
}

Form2htm

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#實現打印功能
相關文章
相關標籤/搜索