水晶報表介紹
水晶報表是 vs 早期版本自帶的一款報表控件。vs2017不自帶水晶報表,需要自行安裝。雖然水晶報表是收費控件,但是微軟已經付過錢了,所以vs自帶的水晶報表可以直接使用。
如果項目是 .net 4.0 以上版本,需要修改 App.config 文件。因為水晶報表的 .net 版本可能低於 .net 4.0
在軟件發布的時候需要把對應的config文件一起發布,否則也無法使用水晶報表
<startup useLegacyV2RuntimeActivationPolicy="true"> //在這一行加入 useLegacyV2RuntimeActivationPolicy="true"
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
在解決方案資源管理器中添加數據集DataSet1.xsd,在數據集中添加 DataTable.
新建 Crystal Reports 文件
在解決方案資源管理器中新建 Crystal Reports 文件: CrystalReport1.rpt 。添加后左側會出現 “字段資源管理器” 。如果不小心關掉字段資源管理器,可以在 “視圖” “其它窗口” “文檔大綱” 將其調出。
vs的工具箱中也會出現相應的控件。可以將文本對象添加到報表中。 文本對象常用屬性:CanGrow (可以自動換行) HorAlignment (居中,靠左,靠右)。
在數據庫字段右鍵選擇數據庫專家。添加項目數據中的 DataTable1
在 “組名字段” 右鍵插入組。選擇 DataTable1 中的字段 ,排序方式選擇按原始順序(水晶報表的排序方式不實用,一般在設置 DataTable 時自行排序)。
數據庫字段中的 Name Sex 可以拖到報表的詳細資料中。報表的頁眉會自動添加文本框。文本框的內容可修改為姓名,性別。
在界面中添加顯示控件:CrystalReportViewer 重命名為crv
在窗口中創建報表對象並添加數據,顯示到 CrystalReportViewer 上面。可以直接打印,也可以通過控件上的打印按鈕打印。
using CrystalDecisions.CrystalReports.Engine; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace CrTest { public partial class Form1 : Form { public Form1(bool directPrint = false) { InitializeComponent(); DataSet1 ds = new DataSet1(); ds.DataTable1.Rows.Add("組1", "張1", "男"); ds.DataTable1.Rows.Add("組3", "王1", "男"); ds.DataTable1.Rows.Add("組2", "李1", "男"); ds.DataTable1.Rows.Add("組1", "張2", "男"); ds.DataTable1.Rows.Add("組1", "張3", "女"); ds.DataTable1.Rows.Add("組1", "張4", "男"); ds.DataTable1.Rows.Add("組2", "李2", "男"); ds.DataTable1.Rows.Add("組2", "李3", "女"); ds.DataTable1.Rows.Add("組2", "李4", "男"); ds.DataTable1.Rows.Add("組3", "王2", "男"); ReportClass cr = new CrystalReport1(); cr.SetDataSource(ds); TextObject title = (TextObject)cr.ReportDefinition.ReportObjects["Text1"]; title.Text = "人員表格"; if (directPrint) { PrintDialog print = new PrintDialog(); if (print.ShowDialog() == DialogResult.OK) { cr.PrintOptions.PrinterName = print.PrinterSettings.PrinterName; cr.PrintToPrinter(1, false, 0, 0); } } this.crv.ReportSource = cr; } } }
結尾
除了上述的基本功能外,水晶報表還有很多其他的用法。如:節專家,交叉表(在報表上右鍵選擇 插入 交叉表)。筆者精力有限,未能繼續研究。