最近項目需要實現報表功能,平衡各方面的因素,還是使用Crystal Report(水晶報表)
下載較新版本: http://downloads.businessobjects.com/akdlm/cr4vs2010/CRforVS_13_0_21.exe
下載后解壓,使用管理員權限安裝。
選擇語言,點擊下一步,同意SAP BUSINESSOBJECTS license Agreement:
選中Yes,install 64-bit runtime選項。
點擊Finish按鈕,繼續安裝。
安裝結束,所有安裝窗口自動關閉。
打開你的項目,參考下面幾個類:
打開Web.Config文檔,需要配置Crystal Report:

<configSections> <sectionGroup name="businessObjects"> <sectionGroup name="crystalReports"> <section name="rptBuildProvider" type="CrystalDecisions.Shared.RptBuildProviderHandler, CrystalDecisions.Shared, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304, Custom=null" /> <section name="crystalReportViewer" type="System.Configuration.NameValueSectionHandler" /> </sectionGroup> </sectionGroup> </configSections>

<assemblies> <add assembly="CrystalDecisions.Web, Version=13.0.3500.0, Culture=neutral, PublicKeyToken=692FBEA5521E1304"/> <add assembly="CrystalDecisions.Shared, Version=13.0.3500.0, Culture=neutral, PublicKeyToken=692FBEA5521E1304"/> <add assembly="log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=692FBEA5521E1304"/> <add assembly="CrystalDecisions.ReportSource, Version=13.0.3500.0, Culture=neutral, PublicKeyToken=692FBEA5521E1304"/> <add assembly="CrystalDecisions.ReportAppServer.Controllers, Version=13.0.3500.0, Culture=neutral, PublicKeyToken=692FBEA5521E1304"/> <add assembly="CrystalDecisions.ReportAppServer.DataDefModel, Version=13.0.3500.0, Culture=neutral, PublicKeyToken=692FBEA5521E1304"/> <add assembly="CrystalDecisions.CrystalReports.Engine, Version=13.0.3500.0, Culture=neutral, PublicKeyToken=692FBEA5521E1304"/> </assemblies>

<businessObjects> <crystalReports> <rptBuildProvider> <add embedRptInResource="true" /> <add extension=".rpt" type="CrystalDecisions.Web.Com pilation.RptBuildProvider, CrystalDecisions.Web, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/> </rptBuildProvider> </crystalReports> </businessObjects>
接下來,為ASP.NET MVC項目添加一頁網頁是asp.net 的ASPX,網頁名為CurrencyReport.aspx,它自帶有CurrencyReport.aspx.cs如下圖。
對這頁網頁暫時不需添加任何代碼,稍后創建好.Rpt報表后再來寫代碼。
現在開始創建.rpt水晶報表:
報表創建完畢,此時打開上面創建的ASPX網頁。
再打開.aspx.cs代碼頁,編寫加載水晶報表程序:

string reportPath = Server.MapPath("CurrencyReport.rpt"); ReportDocument repDoc = new ReportDocument(); try { if (!File.Exists(reportPath)) { Response.Write("指定的報表不存在。 \n"); } repDoc.Load(reportPath); repDoc.SetDatabaseLogon("username", "password", "127.0.0.1", "DBname", true); this.CrystalReportViewer1.ToolPanelView = CrystalDecisions.Web.ToolPanelViewType.None; this.CrystalReportViewer1.HasToggleGroupTreeButton = false; this.CrystalReportViewer1.ReportSource = repDoc; } catch (Exception ex) { Response.Write(ex.Message); }
為程序添加水晶報表完成,我們運行程序,結果如下:
什么內容也沒有顯示,按F12查看,還有crv.js加載失敗和bobj is not defind錯誤。
經過研究與測試,我們還做少一步動作。前往電腦C驅動器:C:\inetpub\wwwroot把aspnet_client整個目錄拷貝至項目的根目錄之下。
再次運行程序:
數據還是沒有顯示,水晶報表需要輸入連接數據安全信息。
解決這個問題,需要打開加載水晶報表的程序,添加一個方法SetDatabaseLogon,並賦其參數