使用水晶報表的強大功能來實現應用程序的統計分析及打印導出等功能,是微軟平臺上進行.NET應用程序開發報表的一種不錯的選擇。水晶報表在設計、開發、配置以及部署上,還是會給初學者帶來一定的困擾的。那么,是否存在一種相對比較簡單而且易用的方式來進行水晶報表的設計、開發、配置以及部署呢?本文將提供一種比較簡單且相對靈活的方法。 本文將包含以下內容:
Crystal Reports的另類非對象模式數據綁定 水晶報表的簡單模式部署 P.S. 本文中描述到的Crystal Reports為Crystal Reports for Visual Studio .NET,原則上該版本是runtime free授權,for unlimited user的。VS IDE版本為2008,Crystal Reports版本為10
Crystal Reports的另類非對象模式數據綁定 水晶報表綁定數據的模式有很多種,其中包括使用DataSet、DataReader及ObjectCollection等。在某個特定的系統項目中,我們多數通過指定的業務數據庫來提供對報表數據的支持。本文將主要描述一種非數據庫數據綁定的變通模式,通過這種模式進行綁定的報表,可以不用設置其數據庫驗證參數(DBLogon)的相關信息,具體的數據源可以來源于數據庫,也可以來源于xml文件等其他半結構化數據。 在VS IDE項目的Solution Explorer中,建立存放報表文件的文件夾,如ReprotFilesFolder 用鼠標右鍵點擊新建的文件夾,選擇添加新項(Add New Item...) 選擇“XML Schema”,將文件命名為Demo.xsd 用DataSet Editor打開該Schema文件,點擊“Ctrl+Alt+S”,打開“Server Explorer”,找到當前項目使用的數據庫連接,將報表展示涉及到的數據表拖拽到設計區域 推拽的表可以是存在鍵值關系的表,也可以是毫無關系的表,甚至通過存儲過程建立的臨時表,保存該xsd文件 用鼠標右鍵點擊新建的文件夾,選擇添加新項(Add New Item...) 選擇Crystal Report,將報表文件命名為Demo.rpt,點擊添加(Add) 在打開的水晶報表向導窗口中選擇“使用報表向導”,點擊確定 在報表向導的數據向導頁中,選擇“創建新連接-數據庫文件” 點擊數據庫文件前的“+”,將彈出選擇數據文件窗口,找到剛才創建的Demo.xsd文件,并點擊“打開” 此時,我們剛添加到Demo.xsd中的兩個數據表將出現在“數據文件”節點的子節點下,選中數據表,點擊“>”按鈕,將表添加到“已選擇表”列表中 點擊“下一步”,可以為表之間添加隱式的鍵值關系 點擊完成,將生成一張空白的報表 根據實際的業務情況設計符合要求的報表,并保存報表文件,例如下圖 設計工作到此告一段落,下面將進行數據的綁定。 新建一個WebForm頁面,將CrystalReportViewer添加到頁面中,如下圖所示 在后臺頁面中首先引用Crystal Reports的程序集 using CrystalDecisions.CrystalReports.Engine; using CrystalDecisions.Shared; 定義變量 private ReportDocument reportDocument; 添加自定義方法 /// <summary> /// 初始化報表 /// </summary> private void ConfigureCrystalReports() { //當前業務的報表打印文件 string RPTFile = ""; //當前業務的報表打印數據集 DataSet ds = null;
#region 獲取報表打印文件 if (Session["rf"] == null) { RPTFile = Server.MapPath("Demo.rpt"); Session["rf"] = RPTFile; } else RPTFile = Session["rf"].ToString(); #endregion
#region 獲取當前業務的報表打印數據 if (Session["pd"] == null) { ds = new DataSet(); string sql = ""; sql = "select * from SalesMaster where BItemSerialNumber='0802280001'"; DataSet masterDs = 填充主表數據 //將主表添加到報表數據集中 ds.Merge(masterDs); //利用同樣的方法添加子表或其他的表,甚至可以添加表和表之間的關系
//上述方法也可以從其他數據源讀入數據,包括Access數據庫、xml數據等
Session["pd"] = ds; } else ds = (DataSet)Session["pd"]; #endregion
if (Session["reportDocument"] == null) { reportDocument = new ReportDocument(); reportDocument.Load(RPTFile); reportDocument.SetDataSource(ds); Session["reportDocument"] = reportDocument; } else reportDocument = (ReportDocument)Session["reportDocument"]; ReportViewer.ReportSource = reportDocument; }
在頁面的Page_Load方法中添加Response.Expires = -1; 添加頁面初始化方法 /// <summary> /// 頁面初始化事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void Page_Init(object sender, EventArgs e) { ConfigureCrystalReports(); }
至此,報表的數據綁定及顯示工作完成。編譯項目后,在瀏覽器中可以查看報表效果。此種方法的靈活性在于 完成后,完全可以刪除.xsd的Schema文件而運行,或將.xsd文件移出項目。 數據的讀入,不論來自SQL Server、Access還是xml數據,只要符合我們設定的Schema的表格式,即可以綁定到報表中。 我們也可以修改并強化上述的ConfigureCrystalReports方法,并建立系統管理頁面,在管理頁面上進行數據來源的選擇和設定等。 水晶報表的簡單模式部署 將水晶報表部署到目標服務器的原因是,.NET Framework的安裝中并沒涵蓋水晶報表的合成項。在之前,曾經聽說過程序員為了將水晶報表的支持部署到服務器,而在服務器上安裝VS IDE的事情。因此,在這里給一個簡單的方法。 在安裝了VS IDE的開發機環境中,打開資源管理器 VS2005定位到: %systemroot%\Program Files\Microsoft Visual Studio 8\SDK\v2.0\BootStrapper\Packages\CrystalReports VS2008定位到: %systemroot%:\Program Files\Microsoft SDKs\Windows\v6.0A\Bootstrapper\Packages\CrystalReports10_5 在上述文件夾中找到CRRedist2005_x86.msi或CRRedist2008_x86.msi文件,在服務器上安裝即可
|