關於vs2010下使用水晶報表了解情況記錄如下:
1.首先vs2010不再自帶水晶報表控件了,需要下載安裝vs2010配套的水晶報表控件:CRforVS_13_0。這個控件安裝很簡單,基本上都選擇默認設置就可以了。
2.安裝之后,再在vs2010中添加新項,選中reporting,下面就有CrystalReports的選項了,這個就是水晶報表文件。
3.新建一個CrystalReports文件,vs2010會彈出一個水晶報表模版生成向導,可以根據向導指示,一步一步的生成自己需要的報表文件。這里我選擇了標准模式。
4.根據向導的數據庫連接提示,我選擇了oracle服務器連接,使水晶報表與數據庫連接起來,只需要按要求輸入服務名,用戶和密碼,水晶報表模版就會自己連接上oracle。
5.然后選擇需要的表或者視圖,並選擇相應的字段,(我跳過了后面的分組和過濾字段的設置),然后選擇報表樣式,水晶報表就會為你自動生成一個默認的模版。
你可以在此模版上進一步進行樣式的優化調整,包括增加合並,求和等等高級操作。
6.至此,模版制作完成,現在開始寫代碼。
新建一個webform窗體,並在工具箱中選擇報表設計,拖放一個CrystalReportViewer控件到頁面上,這個就是水晶報表的web控件,有了它就可以輕松實現很多復雜的功能了。
7.可以根據自己的需求通過控制該控件的屬性來控制控件的顯示效果。
如:
HasPrintButton="False" //不顯示打印功能按鈕
HasCrystalLogo="False" //不顯示水晶報表logo
HasDrilldownTabs="False" //不顯示下載按鈕
HasDrillUpButton="False" //不顯示上傳按鈕
HasGotoPageButton="False" //不顯示轉跳按鈕
ToolPanelView="None" //不顯示工具欄
HasToggleGroupTreeButton="false" // 不顯示水晶報表樹按鈕。
8.那么如何讓這個水晶報表在頁面上跑起來呢?下面是相關的代碼
首先需要說明的是,水晶報表和眾多報表控件一樣有pull模式和push模式的區別。所謂的pull模式就是在模版中指定數據源,並通過模版直接取得數據並顯示到控件上的模式,也是我正在使用的模式。push模式,是自己在程序中組織數據源,並推送給水晶報表模版,顯示在控件上的模式,屬於高級應用,更強大更靈活,當然自己也需要寫更多的代碼。
今天這里主要將簡單好用的pull模式。
首先,初始化水晶報表類並裝載好需要的模版。
1 //找到水晶報表模版,我的水晶報表是放在web系統根目錄下的WebReport文件夾中的, 2 string MasterplateName = "test.rpt"; 3 string reportPath = Server.MapPath(Request.ApplicationPath + "/WebReport/" + MasterplateName); 4 ReportDocument myReport = new ReportDocument(); 5 myReport.Load(reportPath);
接下來,需要重新為模版的數據庫連接指定連接串防止,水晶報表連接不到數據庫
//定義水晶報表的數據庫連接信息 ConnectionInfo connectionInfo = new ConnectionInfo(); //取到webconfig中的連接串 string sOracleCon = System.Configuration.ConfigurationManager.AppSettings["connectionString"].TrimEnd(';'); //處理得到數據源,用戶和密碼 string[] listOracleCon = new string[3]; string[] listOracleConTemp1 = sOracleCon.Split(';'); for (int i = 0; i < listOracleConTemp1.Length; i++) { string[] listOracleConTemp2 = listOracleConTemp1[i].Split('='); listOracleCon.SetValue(listOracleConTemp2[1], i); } //數據庫名或數據庫服務 connectionInfo.DatabaseName = listOracleCon[0]; //用戶名 connectionInfo.UserID = listOracleCon[1]; //用戶密碼 connectionInfo.Password = listOracleCon[2]; //數據庫地址,oracle數據庫不需要設置 //connectionInfo.ServerName = "localhost"; //將數據庫信息傳遞給報表 SetDBLogonForReport(connectionInfo, myReport);
private void SetDBLogonForReport(ConnectionInfo connectionInfo, ReportDocument reportDocument) { Tables tables = reportDocument.Database.Tables; foreach (CrystalDecisions.CrystalReports.Engine.Table table in tables) { TableLogOnInfo tableLogonInfo = table.LogOnInfo; tableLogonInfo.ConnectionInfo = connectionInfo; table.ApplyLogOnInfo(tableLogonInfo); } }
最后,將水晶報表對象賦給頁面模版
//把模板對象賦給報表前端呈現控件CrystalReportViewer1 CrystalReportViewer.ReportSource = myReport;
完成之后,編譯,就可以在頁面上看到效果了,非常的方便和快捷。
最后自己再記錄一下,push模式,需要自己先通過代碼連接數據庫,並生成dataset,再傳給水晶報表類,並賦給模版。以便后面的自學。
DataSet ds = new DataSet(); ReportDocument myReport = new ReportDocument(); myReport.SetDataSource(ds); CrystalReportViewer.ReportSource = myReport;