水晶報表(web)表格信息展現

1、環境安裝html

開發工具使用VS2010+SAP Crystal Reports13_0+.NETformwork4.0
web

由於vs2010已經再也不集成水晶報表,因此須要咱們去找合適的版本下載http://scn.sap.com/docs/DOC-7824redis

或者直接點擊鏈接下載開發安裝包(開發工具包)數據庫

http://downloads.businessobjects.com/akdlm/cr4vs2010/CRforVS_13_0.exe服務器

直接下載部署環境安裝包(MSI環境包):ide

32位系統:http://downloads.businessobjects.com/akdlm/cr4vs2010/CRforVS_redist_install_32bit_13_0.zip工具

64位系統:http://downloads.businessobjects.com/akdlm/cr4vs2010/CRforVS_redist_install_64bit_13_0.zip佈局

系統打包須要文件(MSM集合包):post

http://downloads.businessobjects.com/akdlm/cr4vs2010/CRforVS_mergemodules_13_0.zip開發工具

Install Executable: 包括VS插件、報表設計器、運行環境等全部東西,裝上後就能夠在VS中建立CR報表。也就是說是開發環境的安裝包;

MSI 32/64 Bit: 運行環境獨立安裝包,分別適用於32/64平臺。用於開發完成服務器部署使用;

MSM 32 Bit: 也是運行環境,只不過是用來合併在安裝包中的,不能獨立安裝。看起來只有32位版;下文我所謂的MSM合併法就指它

「下一步」安裝,成功後在左側工具欄會發現多處三個工具。

 

工具 做用
CrystalReportViewer 該控件將報表顯示在基於頁面的佈局中,可在頁面之間進行移動。
CrystalReportPartsViewer 該控件將報表摘要信息顯示在一個相似於門戶的小窗口中,可經過一系列的連接部件向下鑽取到報表。
CrystalReportSource 數據源空間,綁定數據後做爲CrystalReportViewer的數據源使用。

2、報表應用與設計

把CrystalReportViewer空間放在頁面上,接下來能夠爲其配置數據源。

數據源的配置有兩種方式,直接經過數據庫鏈接綁定數據,另外一種位靈活數據員綁定(自建實體類或者自建數據集)。

介紹一種經常使用的定義數據源也就是你們說的PUSH模式。

 一、設計數據集

在此由於報表中涉及到綁定數據庫篩選結果的多條記錄,因此先建立.xsd數據集

新建文件後,點擊添加工具箱DataTable,一個做爲獲獎記錄顯示,一個做爲培訓記錄顯示。

設置完成後,保存。能夠在頁面CS文件進行直接賦值。

2.設計報表

報表頭部和尾部在報表中製做一次顯示。

打開數據專家,創建數據鏈接。

在報表中綁定數據字段

這個地方值得注意的是,在設計好詳細資料的數據,若是詳細資料的空白位置拉的太長會將下一條數據顯示至至空白後,入股頁面太小將會形成只辦電影出一條數據。

對於實際需求,在本報表中出了頭部信息和上面的培訓信息外還須要獲獎信息,這些都是一句我的的狀況去綁定,因此這時須要添加子報表來完成數據的綁定。

插入子報表,以相同的模式編輯自報表,爲了顯示數據的美觀,咱們能夠把頁眉和頁腳設置爲「抑制顯示(無向下鑽去)」,也就是說不在界面中顯示他們。

子報表是能夠在主報表添加新欄進行編輯的。

由於報表中出現了蓋章等信息,能夠經過‘節專家’添加報表尾abc或更多。

三、數據綁定

         string path = Server.MapPath("~/ReportForm/CrystalReport.rpt");
                ReportDocument myReport = new ReportDocument();
                myReport.Load(path);
                //爲包含子報表和主報表指定數據源,這部分數據可重疊在(詳細資料)綁定
                DataSet1 DSourse = new DataSet1();
                //獲取培訓記錄
                DataTable DtTRecord = new Facade_PX.Info.InfoQuery().Query_Px_Ercp_People_Train_Record(strCondtion);
                if (DtTRecord != null && DtTRecord.Rows.Count > 0)
                {
                    for (int tr = 0; tr < DtTRecord.Rows.Count; tr++)
                    {
                        DataRow TRdr = DSourse.PX_ERCP_PEOPLE_TRAIN_RECORD.NewRow();
                        TRdr["HOSPITAL_NAME"] = "醫院名稱";
                        TRdr["TRAIN_HOSPITAL"] = DtTRecord.Rows[tr]["TRAIN_HOSPITAL"];
                        TRdr["DURATION_NAME"] = "培訓時間";
                        TRdr["TRAIN_DURATION"] = DtTRecord.Rows[tr]["TRAIN_DURATION"];
                        DSourse.PX_ERCP_PEOPLE_TRAIN_RECORD.Rows.Add(TRdr);
                    }
                }
                //綁定獲獎記錄
                DataTable DtTAwards = new Facade_PX.Info.InfoQuery().Query_Px_Ercp_People_Awards(strCondtion);
                if (DtTAwards != null && DtTAwards.Rows.Count > 0)
                {
                    for (int aw = 0; aw < DtTAwards.Rows.Count; aw++)
                    {
                        DataRow AWdr = DSourse.PX_ERCP_PEOPLE_AWARDS.NewRow();
                        AWdr["AWARDS_NAME"] = "獲獎經歷";
                        AWdr["AWARDS_RECORD"] = DtTAwards.Rows[aw]["AWARDS_RECORD"];
                        DSourse.PX_ERCP_PEOPLE_AWARDS.Rows.Add(AWdr);
                    }
                }
                myReport.SetDataSource(DSourse);
 //爲RTF報表指定靜態文本
((TextObject)myReport.ReportDefinition.ReportObjects["Title"]).Text = "中國ERCP技術標準化人才培訓項目申請表";
//用實體類的數據填充表格中出現字段
((TextObject)myReport.ReportDefinition.ReportObjects["ApplyName"]).Text = Info.Apply_name;
//隱藏工具欄 CrystalReportViewer1.DisplayToolbar = false;
//隱藏菜單欄工具
CrystalReportViewer1.HasToggleGroupTreeButton = false;
CrystalReportViewer1.DisplayGroupTree = false;
CrystalReportViewer1.HasCrystalLogo = false;
CrystalReportViewer1.HasGotoPageButton = false;
CrystalReportViewer1.HasPageNavigationButtons = true;
CrystalReportViewer1.HasSearchButton = false;
CrystalReportViewer1.HasZoomFactorList = false;
CrystalReportViewer1.HasRefreshButton = false;
//指定數據源 CrystalReportViewer1.ReportSource = myReport;

 數據綁定,開始預覽時,每每程序會出現無效數據員等異常。解決辦法:首先檢查綁定數據對象是否存在,經過調試檢查是否有代碼上的問題。若是代碼沒問題那麼就要檢查類庫的引用是否爲同一個版本,若是不是則修改版本爲最新版本。修改版本一致,主要修改幾項以下:

頁面修改:

<%@ Register Assembly="CrystalDecisions.Web, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"
    Namespace="CrystalDecisions.Web" TagPrefix="CR" %>

Webconfig修改:

<system.web>
<compilation debug="true" targetFramework="4.0">
      <assemblies>
  <add assembly="CrystalDecisions.CrystalReports.Engine, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/>
        <add assembly="CrystalDecisions.ReportSource, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/>
        <add assembly="CrystalDecisions.Shared, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/>
        <add assembly="CrystalDecisions.Web, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/>
        <add assembly="CrystalDecisions.ReportAppServer.ClientDoc, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/>
</assemblies>
      <buildProviders>
        <add extension=".rpt" type="CrystalDecisions.Web.Compilation.RptBuildProvider, CrystalDecisions.Web, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/>
      </buildProviders>
    </compilation>
</system.web>

預覽結果:

3、報表打印與部署

1.報表打印

獲取當前默認打印機

  /// <summary>
    /// 打印機實例
    /// </summary>
    private static PrintDocument fPrintDocument = new PrintDocument();
    ///
    /// 獲取本機默認打印機名稱
    ///
    public static String DefaultPrinter
    {
        get { return fPrintDocument.PrinterSettings.PrinterName; }
    }

打印數據

myReport.PrintOptions.PrinterName = DefaultPrinter;
myReport.PrintToPrinter(1, false, 0, 0);

2.服務器部署

服務器部署正確配置也比較簡單

下載在第一部分提到的環境32位和64位環境包,若是是在32環境下開發,而且已經在應用程序池Enable 32-Bit Applications 爲True。那麼必定要安裝32位CRforVS_redist_install_32bit_13_0.zip不然會出現<add assembly="CrystalDecisions.ReportAppServer.ClientDoc, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/>的引用錯誤。

調試經過後,點擊打印預覽會發現報表一片空白,這時由於還未將皮膚引用文件引用到IIS的WebSite,須要將C:\inetpub\wwwroot\aspnet_client此路徑下的文件拷貝到站點的根目錄,瀏覽便可。

值得注意的是在服務器,因爲PrintDocument獲取的是服務器打印機因此會出現「默認打印機未設置」的錯誤提示,因此這裏咱們就使用水晶報表工具欄自帶打印按鈕。

首選,先將CrystalReportViewer1設置爲PrintMode="ActiveX",再將工具欄的打印按鈕顯示出來CrystalReportViewer1.HasPrintButton = true。

在你彈出打印預覽的Click事件中使用Session記錄ReportDocument

代碼以下:Session["keepreport"] = myReport;

在頁面加載Page_Load中加入

if (Session["keepreport"] != null)
        {
            CrystalReportViewer1.ReportSource = (ReportDocument)Session["keepreport"];
        }

主要是由於頁面刷新的問題。

3.異常處理

用着用着,一段時間後會發現出現異常「已達到系統管理員配置的最大報表處理做業數限制」,

在這篇博客中也有講到如何解決

水晶報表服務器運行一段時間提示錯誤:已達到系統管理員配置的最大報表處理做業數限制。

但正由於這個緣由致使,後期打印按鈕不能打印。

通過對頁面生命週期分析後,將ReportDocument資源釋放放在Page_Disposed中便可完美解決,不能打印問題。

Page_Unload:頁面從內存中卸載

Page_Disposed:Page對象從內存中釋放掉。這是Page對象生命週期中的最後一個事件

因此明顯就能夠對比處結果。

相關文章
相關標籤/搜索