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