一、水晶報表簡介 Crystal Reports(水晶報表)是一款商務智能(BI)軟體,主要用於設計及產生報表。水晶報表是業內最專業、功能最強的報表系統,它除了強大的報表功能外。最大的優勢是實現了與絕大多數流行開發工具的集成和介面。在VS.Net平臺做過報表開發的程式員,一定都對水晶報表強大、高效、 ...
一、水晶報表簡介
Crystal Reports(水晶報表)是一款商務智能(BI)軟體,主要用於設計及產生報表。水晶報表是業內最專業、功能最強的報表系統,它除了強大的報表功能外。最大的優勢是實現了與絕大多數流行開發工具的集成和介面。在VS.Net平臺做過報表開發的程式員,一定都對水晶報表強大、高效、集成等特性留下了深刻印象。 除了開發新程式外,在工作中我們常需要接觸到很多較早的軟體系統報表功能升級的需求,如果能結合水晶報表這一強大的工具,往往能事半功倍。
二、水晶報表的實現模式
在講解水晶報表實現模式之前,首先講解一下我的電腦使用配置環境:
Visual Studio 2013與SQL Server 2012
因為VS2013沒有自帶創建水晶報表的功能,所以需要到網上下載並安裝一個插件,才能使用VS2013創建水晶報表。
插件下載地址:http://www.aspsnippets.com/Articles/Download-Crystal-Reports-for-Visual-Studio-2013.aspx
插件安裝成功後打開VS2013,會發現工具箱里多了這些東西,那麼說明你的VS2013已經安裝了水晶報表的插件,現在可以通過VS2013創建水晶報表了。
2.1、拉(PULL)模式
概念介紹:拉模式是由水晶模板(引擎)直接連接資料庫(源),從資料庫(源)裡拉取數據。
2.1.1、不敲一句代碼創建水晶報表拉模式
1、首先在創建水晶報表拉模式之前我們需要準備資料庫數據:
use master go create database Demo go use Demo go create table Dept ( ID int primary key identity(1,1), DeptID nvarchar(10), DeptName nvarchar(10) ) go create table UserInfo ( ID int primary key identity(1,1), UserName nvarchar(10), Salary decimal(10,2), Gender bit, DeptID int foreign key references Dept(ID) ) go insert into Dept values('HR','人事部') insert into Dept values('DT','開發部') go insert into UserInfo values('程式猿1',2500,1,2) insert into UserInfo values('程式猿2',3500,0,2) insert into UserInfo values('程式猿3',5500,0,1) insert into UserInfo values('程式猿4',6500,1,1) insert into UserInfo values('程式猿5',10500,1,2) go
2、然後,打開VS2013創建一個空網站項目。
3、接著在該項目下右鍵添加一個Reports文件夾,用來管理水晶報表。
4、接著 在文件夾下右鍵選擇添加"新建項目",找到"CrystalReports",輸入報表名稱。
5、點擊添加按鈕後,會彈出預設的水晶報表嚮導對話框,我們按嚮導預設選項。
6、確定後,打開“標準報表創建嚮導”界面。
7、連接資料庫成功後,會在簡歷連接那裡出現你的連接信息,然後選擇你要顯示的表。
8、這裡選擇你要顯示的表欄位。
9、點擊下一步後後面彈出的選項可以不用選擇,因為暫時還用不著,所以後面一直點擊下一步到完成會出現以下界面。
10、看到上面這個界面,說明你已經創建了一個水晶報表模板,因為是直接連接資料庫的,所以我們可以能立即看到實際的效果,點擊最下麵的主報表預覽,即可顯示資料庫的表數據。
至此,我們沒有敲過任何代碼,拉模式報表創建完成。
2.1.1、在Web中使用水晶報表拉模式
在之前創建的項目中,添加一個Web窗體,命名為CrystalReport_Pull.aspx。
然後打開設計頁面,找到工具箱中的報表設計,雙擊或單擊拖入到Web窗體中,如下圖所示。
方式一:不敲代碼通過設計器綁定數據源,顯示數據。
點擊確定後,你會看到Web窗體如下界面。
點擊源,可以看到如下界面,設計器會自動生成以下代碼。
最後我們運行VS2013在瀏覽器中查看效果,發現什麼都沒有顯示,然後打開瀏覽器調試工具發現,報了以下錯誤。
此問題解決辦法如下:找到C:\inetpub\wwwroot此目錄下的文件夾,然後拷貝到你的項目的根目錄下。
重新編譯,再運行瀏覽查看,如下圖,可以看到數據可以正常顯示。
方式二:通過後臺編寫代碼,連接資料庫綁定數據源,顯示數據。
重新添加一個Web窗體,創建步驟與上面一致。然後右鍵點擊查看源代碼,添加如下代碼即可實現水晶報表拉模式。
1 using CrystalDecisions.CrystalReports.Engine; 2 using CrystalDecisions.Shared; 3 using System; 4 using System.Collections.Generic; 5 using System.Linq; 6 using System.Web; 7 using System.Web.UI; 8 using System.Web.UI.WebControls; 9 10 namespace ch02 11 { 12 public partial class CrystalReport_Pull : System.Web.UI.Page 13 { 14 protected void Page_Load(object sender, EventArgs e) 15 { 16 ConfigureCrystalReports(); 17 } 18 19 private ReportDocument myReport; 20 private void ConfigureCrystalReports() 21 { 22 //定義ReportDocument對象,裝載Crystalreport1.rpt 23 myReport = new ReportDocument(); 24 string reportPath = Server.MapPath("Reports/CrystalReport1.rpt"); 25 myReport.Load(reportPath); 26 //把模板對象賦給報表前端呈現控制項CrystalReportViewerl 27 CrystalReportViewer1.ReportSource = myReport; 28 } 29 } 30 }
實現效果同上
2.2、推(PUSH)模式
概念介紹:由應用程式從資料庫(源)獲取數據,然後把數據推送給水晶報表引擎。水晶報表本身不與資料庫進行交互。
1、要實現水晶報表推模式,首先我們需要在 網站項目中添加一個數據集。
2、然後你有兩種方式 創建數據表,這裡我們選擇方式二創建。
3、把要顯示的表拖入右邊。
4、接下來要設計一個水晶報表模板。在Reports文件夾上右鍵添加新建項,步驟與上面推模式步驟一致,這裡就不再詳細解說。
5、最後我們開始編寫頁面CrystalReport_Push.aspx後臺代碼。
首先引入如下命名空間:
using CrystalDecisions.CrystalReports.Engine; using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace ch02 { public partial class CrystalReport_Push : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { LoadCrystalReports(); } //載入水晶報表 private void LoadCrystalReports() { DataSet ds = new DataSet(); string connStr = @"server=PC-201511211346\MSSQLSERVER2;database=Demo;uid=sa;pwd=123456"; using (SqlConnection conn = new SqlConnection(connStr)) { conn.Open(); string SQL = "select * from UserInfo"; SqlDataAdapter sda = new SqlDataAdapter(SQL, conn); sda.Fill(ds, "UserInfo"); } ReportDocument rd = new ReportDocument(); //獲取報表路徑 string reportPath = Server.MapPath("Reports/CrystalReport2.rpt"); rd.Load(reportPath); //綁定數據集,註意一個表用一個數據集。 rd.SetDataSource(ds); CrystalReportViewer1.ReportSource = rd; } } }
最後運行查看效果:
總結:此文章是本人對ASP.NET 水晶報表(Crystal Reports)的簡單使用做了一個學習總結,目的是為了幫助想要學習水晶報表的初學者做了一個入門指導,讓初學者少走一些彎路。