熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

VS.Net水晶報表實現方法

2013-11-13 10:07:44  來源: .NET編程 

  簡介

  水晶報表可以由很多的方法得到其中一個就是使用VSNet來創建它提供了非常豐富模型以使我們能夠在運行時操作屬性和方法如果你正在使用VSNet開發Net程序那麼你就不需要再安裝其它軟件了因為他已經內嵌在VSNet中了

  優點:

  VSNet水晶報表有下面一些主要的優點

  快速的報表開發

  能夠導出成為復雜的交互性圖表

  可以與其它控件一起在WebForm中使用

  能夠動態地將報表導出成為pdfdocxlshtmlrtf等多種格式

  結構

  一些組件組成了水晶報表的二層結構需要的Web應用有

  客戶端 :

  客戶端僅需要一個可以訪問嵌入aspx頁面報表的游覽器就可以了

  服務器 :

   水晶報表引擎(Crystal Report Engine (CREnginedll))

  通過它可以完成一些任務如在報告文件中合並數據轉換報告為其它格式等也正是因為報告引擎的作用才可以將AspNet中的水晶報表轉換成為普通HTML格式

   水晶報表設計器(Crystal Report Designer (CRDesignerdll))

  水晶報表就是在設計器中創建的在設計器中你可以設計標題插入數據公式圖表子報表等

   rpt報表文件

  執行報表中的第一步就是在水晶報表設計器接口創建此報表在默認安裝中微軟已經提供了一些現成的rpt例子

   Data Source

  rpt文件取得數據庫的方法取決於你方法的選擇你能選擇讓水晶報表自己選擇數據而不使用任何代碼或者也可以選擇手動的組裝DataSet然後再將其傳送到報表文件

   水晶報表查看控件(Crystal Report Viewer web form Control (CRWebFormViewerdll))

  水晶報表查看控件是一個WebForm控件可以將它看成是一個在aspx頁面中存放報表的容器 注意在一些復雜的操作中報表服務器與Web服務器可能不在同一物理主機上Web服務器將HTTP請求傳送到報表服務器上去水晶報表也可以當做WebService來執行

  執行模式

  水晶報表取數據可以使用下面的方法實現

   Pull 模式:

  被請求時水晶報表直接根據指定的驅動連接數據庫然後組裝這些數據

   Push 模式 :

  此時開發表不得不自己編寫代碼連接數據並組裝DataSet同時將它傳送至報表在些這種情況下通過使用連接共享以及限制記錄集合的大小可以使用報表性能最大化

  報表類型

  水晶報表設計器能夠直接包含報表至工程也能夠使用獨立的報表對象

   Stronglytyped 報表 :

  當你將報表文件加入到項目中去時它就變成了一個了; stronglytyped; 報表在這些情況下你將擁有直接創建報表的對象的權力這將減少一些代碼並且能夠提供一些性能

   UnTyped 報表 :

  這裡的報表並不直接包含在項目中因此稱為untyped 報表在這種情況下你不得不使用水晶報表的ReportDocuemt; 對象建立一個實例並且手動; 地凋用報表

  其它注意事項

   盡管水晶報表查看器擁有一些很酷的功能如縮放頁面導航等但是他不提供打印功能你不得不調用游覽器的打印功能

   VSNet中的水晶報表如果沒有注冊那麼它只能使用次後保存; 功能就不能再使用了為了避免這個你不是不在 這裡注冊此產品 (好像不是這樣子的不注冊也好像能用很長的時間只是不能提供支持)

   默認安裝的水晶報表只能支持個用戶為了支持更多的用戶你不得不在 中購買許可證

  讓我們感受一下----在中使用一個現成的水晶報表文件

  ) 從WebForm工具欄中拖動水晶報表查看器控件(Crystal Report Viewer)至aspx頁面中   

  ) 調出水晶報表查看器控件的屬性窗口  

  ) 點擊[]按鈕查看Data Binding屬性並彈出了DataBinding窗口

  ) 從左邊的Bindable屬性區中選擇; Report Source

  ) 選中自定義綁定表達式單選按鈕在右邊的底部的窗口中指定rpt文件的文件名和路徑例如C:\\Program Files\\Microsoft Visual StudioNET\\Crystal Reports\\Samples\\Reports\\General Business\\World Sales Reportrpt然後確定;

  注意文件World Sales Reportrpt; 文件是在VSNet安裝時創建的如果你在安裝過程中指定了其它目錄此時你最好確認一下路徑的正確性

  上面的步驟中實際上是插入了下面這些代碼至AspNet文件中

  以及             id=CrystalReportViewer
           runat=server Width=px Height=px
           ReportSource=

  注意在飛刀我的VSNet正式版中自動生成的代碼中ReportSource產生的樣式不是這樣子的它是

  ReportSource=

  這樣是錯誤的會出現錯誤信息有兩處錯誤

  必須按照使用本文介紹的格式來手動修改這也算是VSNet的一個Bug吧

  ) 在Page_Load方法中調用DataBind方法(代碼為VBNet)          Private Sub Page_Load(ByVal sender As SystemObject ByVal e As SystemEventArgs)
           DataBind()
        End Sub

  )保存並編譯你的頁面 現在你就有一個內嵌水晶報表的WebForm頁面了

  注意實際開發中一開始會出現無法訪問inetsrv目錄的錯誤解決的辦法是改變其目錄的安全屬性使User用戶有可寫的權限飛刀我發現Net系統自已給出的解決方法是沒有用的也可能是我使用的是WindowsNet操作系統的原因

  AspNet中使用水晶報表(中)

  以下內容為程序代碼:

  使用Pull模式

  我們將通過下面的這些步驟來通過Pull模式來執行水晶報表

  首先創建rpt文件並使用水晶報表設計接口設置一些必須的數據連接

  拖放一個 CrystalReportViewer控件至aspx頁面設置它的屬性指定我們上一步創建的rpt文件

   在代碼中調用DataBind方法

  創建 rpt 文件:

  ) 在右擊解決方案游覽器; 在彈出的菜單中選擇添加; --添加新項; --〉Crystal Report  

  ) 在Crystal Report 庫中選擇作為空白報表; 單選按鈕最後單擊; 確定;  

  )這裡將彈出水晶報表設計器  

  ) 右擊報表中的詳細資料區選擇; 數據庫-〉; 添加/刪除數據庫

  ) 在彈出的數據庫專家; 中擴展OLE DB(ADO); 選項此時會彈出另外一個OLE DB(ADO); 窗口

  ) 在 OLE DB (ADO) 彈出窗口中選擇 Microsoft OLE DB Provider for SQL Server 然後 Next

  ) 指定連接的信息

  服務器 : ASPCN (您的機器是什麼名字就寫什麼)

  用戶 ID: sa

  密碼:

  數據庫 : Pubs

  ) 單擊Next; 最後單擊Finish; 按鈕

  ) 這時你就能在數據庫專家; 窗口中看到我們選擇的數據庫

  ) 擴展Pubs; 數據庫擴展表; 選擇Stores; 表並將其加到選定的表; 區中單擊OK按鈕

  ) 現在在字段資源浏覽器; 中就會在左邊數據庫字段; 區中顯示你選擇的表以及表中的字段

  ) 拖放需要的字段進入報表的詳細資料; 區字段名將會自動出現在頁眉; 區如果你想修改頭部文字則可以右擊頁眉; 區中的文字選擇編輯文本對象; 選項並進行編輯

  ) 保存這樣我們就有了一個水晶報表文件

  創建 CrystalReportViewer 控件

  ) 回到前面的WebForm中拖放一個Crystal Report Viewer控件到頁面中去

  ) 調出Crystal Report Viewer控件的屬性窗口選擇; DataBindings區點擊[

  ) Crystal Report Viewer 數據綁定窗口在右邊的; 可綁定屬性中選擇ReportSource; 並選擇右下角的; 自定義綁定表達式中指定rpt文件路徑  

  ) 此時你能夠從Crystal Report Viewer 控件中看到使用一些虛擬數據組成的報表文件的預覽

  注意在上面的例子中CrystalReportViewer可以在設計時直接調用真實的數據因為此時數據已經保存在這種情況下設計時當沒有保存數據時他是不能顯示數據的取而代這的是顯示一些虛擬的數據只有在執行時才會選取真實的數據

  Code Behind 程序設計

  ) 在Page_Load方法中調用DataBind方法

  執行你的程序

  ) 創建並運行你的程序!  

  您現在就可以直接在Web頁面中使用水晶報表內置的一些功能如頁面導航縮放等

  AspNet中使用水晶報表(下)
        [HTML]我們采用下面的幾步使用Push模式執行水晶報表
        設計一個DataSet
        創建一個rpt文件同時將其指定給上一步建立的DataSet
        在aspx頁面中拖放一個CrystalReportViewer控件同時將其與前面的rpt文件建立聯系
        在代碼中訪問數據庫並把數據存入DataSet
        調用DataBind方法
        設計一個DataSet
        ) 右擊; 解決方案浏覽器選擇; 添加; 添加新項〉; 數據集
        ) 從; 服務器資源管理器中的; SQL Server中拖放; Stores表(位於PUBS數據庫中)
        ) 此時在數據集中就會有一個Stores表的結構圖
        xsd文件中僅僅包含一個結構圖但是不會有任何數據在裡面
        創建 rpt 文件 :
        ) 使用上面的介紹過的方法創建此文件唯一的不同就是使用數據集來代替前面的直接連接數據
        )建立rpt文件之後右擊; 詳細資料添加/刪除數據庫;
        ) 在數據庫專家; 窗口中展開項目數據; (代替以前的OleDb)展開; ADONet數據集DataSet; 選擇Stores; 表
        ) 將Stores表添加到; 選定的表點擊; OK
        ) 使用PULL模式下的方法建立一個WebForm
        建立一個Crystal Report Viewer 控件
        ) 建立一個Crystal Report Viewer 控件並設定其屬性此處與PULL模式下是一致的
        Code Behind 代碼:
        ) 在Page_Load方法中使用下面的子函數
        VBNet代碼             Sub BindReport()
           Dim myConnection As New SqlClientSqlConnection()
           myConnectionConnectionString= server= (local)\NetSDK; database=pubs; Trusted_Connection=yes
           Dim MyCommand As New SqlClientSqlCommand()
           MyCommandConnection = myConnection
           MyCommandCommandText = Select * from Stores
           MyCommandCommandType = CommandTypeText
           Dim MyDA As New SqlClientSqlDataAdapter()
           MyDASelectCommand = MyCommand
           Dim myDS As New Dataset()
           這就是我們在設計模式上使用的DataSet
           MyDAFill(myDS Stores)
           你不得不使用與你前面DataSet相同名字
           Dim oRpt As New CrystalReport()
           水晶報表綁定
           oRptSetDataSource(myDS)
           設定水晶報表的ReportSource
           CrystalReportViewerReportSource = oRpt
           End Sub

  C#代碼          private void BindReport()
        {
           string strProvider = Server=(local); DataBase=pubs; UID=sa; PWD=;
           CrystalReport oCR = new CrystalReport();
           Dataset ds = new Dataset();
           SqlConnection MyConn = new SqlConnection(strProvider);
           MyConnOpen();
           string strSel = Select * from Stores;
           SqlDataAdapter MyAdapter = new SqlDataAdapter(strSelMyConn);
           MyAdapterFill(dsstores);
           oCRSetDataSource(ds);
           thisCrystalReportViewerReportSource = oCR;
        }      
        注意在上面的代碼中你得注意一下oRpt是Strongly Typed的報表文件如果你需要使用UnTyped報表你得使用ReportDocument對象然後再調用報表文件
        運行你的程序
        ) 運行你的程序
        將報表文件導出成為其它格式
        你能夠將報表文件導出成為下列格式          PDF (Portable Document Format)
        DOC (MS Word Document)
        XLS (MS Excel Spreadsheet)
        HTML (Hyper Text Markup Language – or compliant)
        RTF (Rich Text Format)

  使用Pull模式導出報表
        當導出使用Pull模式創建的文件時水晶報表准確地打開所需要的數據下面是執行導出功能的代碼
        C#代碼:
        VBNet代碼:          Private Sub Button_Click(ByVal sender As SystemObject ByVal e As SystemEventArgs) Handles ButtonClick
           Dim myReport As CrystalReport = New CrystalReport()
           注意這裡我們建立一個strongtyped的水晶報表實例
           Dim DiskOpts As CrystalDecisionsSharedDiskFileDestinationOptions = New CrystalDecisionsSharedDiskFileDestinationOptions()
           myReportExportOptionsExportDestinationType = CrystalDecisions[Shared]ExportDestinationTypeDiskFile
           導出成為其它文件時也需要這個選項
           如Microsoft Exchange MAPI等
           myReportExportOptionsExportFormatType = CrystalDecisions [Shared]ExportFormatTypePortableDocFormat
           這裡我們導出成為pdf格式文件你也能選擇上面的其它類型文件
           DiskOptsDiskFileName = c:\Outputpdf
           如果你不指定確切的目錄那麼文件就會保存到[Windows]\System目錄中去了
           myReportExportOptionsDestinationOptions = DiskOpts
           水晶報表文件不包含直接的FileName屬性因此你不能直接指定保存的文件名
           所以你不得不使用DiskFileDestinationOptions對象設置它的DiskFileName屬性
           為你想要的路徑最後將水晶報表的DestinationsOptions屬性指定為上面的DiskFileDestinationOption
           myReportExport()
           上面的代碼將完成導出工作
        End Sub

  使用PUSH模式導出水晶報表

  當導出的報表是由PUSH模式建立的時第一步就是通過編程建立連接並組裝DataSet設置報表的的SetDataSource屬性再下面的步驟就有Pull模式一樣的了

  [/HTML]

  NET環境下水晶報表使用總結

  水晶報表是一個優秀的報表開發工具本人在開發通用管理系統的時候所有報表都使用水晶報表其簡單易用和強大的功能令筆者倍加喜愛現將水晶報表使用手記呈現給大家

  一在使用自帶的水晶報表時請注冊否則只能使用

  水晶報表注冊碼

  注冊號:

  密碼:AAPGKSGDEDS

  二使用CrystalReportViewer進行預覽

  CrystalReportViewer控件允許在應用程序中查看 Crystal ReportReportSource 屬性用於設置要查看哪個報表該屬性設置之後報表顯示在查看器中報表源可以是ReportDocument報表文件的路徑也可以是強類型報表

   打開; 工具箱並將一個 CrystalReportViewer 拖到窗體上我們命名為rptVew

   通過拖放操作將 Windows 窗體查看器調整到希望的大小並將其移動到所需位置

   當運行應用程序時報表將顯示在查看器中

  三創建新報表

   指向; 添加單擊; 添加新項

   在; 添加新項對話框中從; 模板區域選擇 Crystal Report將報表命名為rptClient單擊; 打開

   在 Crystal Report 庫中選擇下列選項之一

  · 使用報表專家 — 指導您完成報表的創建過程並將您的選擇添加到 Crystal Report Designer

  · 作為空白報表 — 打開 Crystal Report Designer

  · 來自於現有的報表 — 創建新報表它與指定的另一報表設計相同

  注意 Crystal Report 庫包含許多專家可以指導您完成數個特定類型報表的創建工作您可能希望使用專家來創建最初的報表以確定哪種報表構造方法適合您的需要

   單擊; 確定按鈕

  如果選擇使用; 報表專家便會出現; 報表專家對話框並帶有數據資源管理器為每個文件夾選擇所需數據完成; 報表專家選項卡界面上的操作然後單擊; 完成來訪問 Crystal Report Designer 和您的報表

  四是否需要動態設置數據源?

  Crystal Reports 通過數據庫驅動程序與數據庫連接每個驅動程序都被編寫為可處理特定數據庫類型或數據庫訪問技術

  拉和推模型

  為了向開發人員提供最靈活的數據訪問方法Crystal Reports 數據庫驅動程序被設計為可同時提供數據訪問的拉模型和推模型

  拉模型

  在拉模型中驅動程序將連接到數據庫並根據需要將數據; 拉進來使用這種模型時與數據庫的連接和為了獲取數據而執行的 SQL 命令都同時由 Crystal Reports 本身處理不需要開發人員編寫代碼如果在運行時無須編寫任何特殊代碼則使用拉模型

  推模型

  相反推模型需要開發人員編寫代碼以連接到數據庫執行 SQL 命令以創建與報表中的字段匹配的記錄集或數據集並且將該對象傳遞給報表該方法使您可以將連接共享置入應用程序中並在 Crystal Reports 收到數據之前先將數據篩選出來


From:http://tw.wingwit.com/Article/program/net/201311/12643.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.