水晶報表是一個優秀的報表開發工具,本人在開發通用管理系統的時候,所有報表都使用水晶報表,其簡單、易用和強大的功能令筆者倍加喜愛,現將水晶報表使用手記呈現給大家。?
一、在使用自帶的水晶報表時,請注冊,否則只能使用30次
水晶報表注冊碼
注冊號:6707437608
密碼:AAP5GKS0000GDE100DS?
二、使用CrystalReportViewer進行預覽
CrystalReportViewer控件允許在應用程序中查看?Crystal?Report。ReportSource?屬性用于設置要查看哪個報表。該屬性設置之后,報表顯示在查看器中。報表源可以是ReportDocument、報表文件的路徑,也可以是強類型報表。
1.?打開“工具箱”,并將一個?CrystalReportViewer?拖到窗體上,我們命名為rptVew。?
2.?通過拖放操作將?Windows?窗體查看器調整到希望的大小并將其移動到所需位置。?
3.?當運行應用程序時,報表將顯示在查看器中。
三、創建新報表
1.?指向“添加”,單擊“添加新項”。?
2.?在“添加新項”對話框中,從“模板”區域選擇?Crystal?Report,將報表命名為rptClient,單擊“打開”。?
3.?在?Crystal?Report?庫中,選擇下列選項之一:?
·?使用報表專家?—?指導您完成報表的創建過程,并將您的選擇添加到?Crystal?Report?Designer。?
·?作為空白報表?—?打開?Crystal?Report?Designer。?
·?來自于現有的報表?—?創建新報表,它與指定的另一報表設計相同。?
注意?Crystal?Report?庫包含許多專家,可以指導您完成數個特定類型報表的創建工作。您可能希望使用專家來創建最初的報表,以確定哪種報表構造方法適合您的需要。
4.?單擊“確定”按鈕。?
如果選擇使用“報表專家”,便會出現“報表專家”對話框,并帶有數據資源管理器。為每個文件夾選擇所需數據,完成“報表專家”選項卡界面上的操作,然后單擊“完成”來訪問?Crystal?Report?Designer?和您的報表
四、是否需要動態設置數據源?
Crystal?Reports?通過數據庫驅動程序與數據庫連接。每個驅動程序都被編寫為可處理特定數據庫類型或數據庫訪問技術。?
拉和推模型
為了向開發人員提供最靈活的數據訪問方法,Crystal?Reports?數據庫驅動程序被設計為可同時提供數據訪問的拉模型和推模型。?
拉模型
在拉模型中,驅動程序將連接到數據庫并根據需要將數據“拉”進來。使用這種模型時,與數據庫的連接和為了獲取數據而執行的?SQL?命令都同時由?Crystal?Reports?本身處理,不需要開發人員編寫代碼。如果在運行時無須編寫任何特殊代碼,則使用拉模型。
推模型
相反,推模型需要開發人員編寫代碼以連接到數據庫,執行?SQL?命令以創建與報表中的字段匹配的記錄集或數據集,并且將該對象傳遞給報表。該方法使您可以將連接共享置入應用程序中,并在?Crystal?Reports?收到數據之前先將數據篩選出來。?
四、從?ADO.NET?數據集制作報表
從數據庫創建數據集對象?
1.?在項目中新建一個架構文件:?
a.?在解決方案資源管理器中,右擊項目名,指向“添加”,然后單擊“添加新項”。?
b.?在“添加新項”對話框的“類別”區域,展開文件夾,然后選擇“數據”。?
c.?在“模板”區域選擇“數據集”。?
d.?接受默認名稱?Dataset1.xsd。?
這就創建了一個新的架構文件?(Dataset1.xsd),以后將用它來生成強類型數據集。該架構文件將顯示在?ADO.NET?數據集設計器中。?
2.?指定數據庫位置:?
a.?在服務器資源管理器中,右擊“數據連接”并選擇“添加連接”。?
b.?在“數據鏈接屬性”對話框中,單擊“提供程序”選項卡,然后選擇一個提供程序(例如?Microsoft?OLE?DB?Provider?for?SQL?Server)。?
c.?單擊“連接”選項卡,然后指定您的數據庫所在位置。在所需位置輸入服務器和登錄信息。?
d.?單擊“確定”按鈕。?
此時,您的數據庫及其表和字段就出現在服務器資源管理器的“數據連接”節點下面。?
3.?在解決方案資源管理器中,雙擊?Dataset1.xsd?(如果它尚不是活動視圖)。?
Dataset1.xsd?現在應顯示在“數據集”選項卡中。?
4.?若要為數據集建立架構,請將需要的表從服務器資源管理器中拖動到?Dataset1.xsd?的“數據集”選項卡上。?
5.?單擊“保存?Dataset1.xsd”來保存“Dataset1.xsd”文件。?
6.?在“生成”菜單上,單擊“生成”為項目生成數據集對象。?
ADO.NET?數據集對象提供數據的描述,從它可以向?Crystal?report?添加表。使用?Crystal?Report?Designer?中的“數據庫專家”從?ADO.NET?數據集對象添加表。?
請在使用“報表專家”創建新報表時調用“數據庫專家”。或者,要從一個已經使用?ADO.NET?建立好的報表中訪問“數據庫專家”,請在?Report?Designer?中右擊,指向“數據庫”,然后單擊“添加/刪除數據庫”。
將報表連接到?ADO.NET?數據集對象?
1.?在“數據庫專家”中,展開“項目數據”文件夾。?
2.?展開“ADO.NET?數據集”文件夾。?
3.?選擇所需數據集對象。?
例如,如果當時使用的是從項目“WindowsApplication1”的架構文件“Dataset1.xsd”中生成的數據集對象,則應該選擇“WindowsApplication1.Dataset1”。?
4.?選擇要向報表中添加的表,和使用其他數據源一樣。?
五、動態改變數據源的代碼?
Dim?dsdataSet?As?New?DataSet()
Dim?oRpt?As?New?rptClient()?'已建立的報表rptClient
請讀者自行填充數據集dsdataSet?
'使用“報表引擎”對象模型將填充的數據集,傳遞給報表
oRpt.SetDataSource(dsdataSet.Tables(0))
'?將帶有數據的報表對象綁定到?Windows?窗體查看器,rptVew(CrystalReportViewer控件)
rptVew.ReportSource?=?oRpt
注意?FillDataSet?方法可連接到指定的數據庫,提取數據,然后斷開數據庫連接。如果您希望將數據庫中的多個表添加到報表中,請使用?SQL?JOIN?語句將這些表聯接在一起;然后在?FillDataSet?方法中指定一個結果表
六、創建主從報表
在報表中,有許多報表是主從表結構,比如訂單與訂單商品明細,訂單是一個表中的一條記錄,而分錄是另一個表中的多條記錄,兩個表通過一個字段關聯起來,這種報表可利用其分組功能實現,
1.?新建一個工程
2.?往FORM1中添加一個CrystalReportViewer控件
3.?在服務噐資源管理器中連接到SQL?SERVER?2000上的Northwind數據庫
4.?添加一個數據集Dataset1,將服務器資源管理器中的Orders和?Order?Details加入到數據集中。
5.?添加一個水晶報表,使用報表專家,在項目數據中選擇“ADO.NET數據集”,插入表Orders和?Order?Details,“鏈接”中是關聯字段的鏈接,在“字段”中選擇要顯示的主表和明細表的字段,組中選擇分組依據為Orders表OrdersID字段,總計,圖表,選擇(可進行篩選),樣式(可設置報表標題),可自行設置。設置完后,點擊完成。
6.?在報表設計器中調整需要顯示的字段的位置、寬度等。
7.?在窗口中添加代碼。
Private?Sub?Form1_Load(ByVal?sender?As?System.Object,?ByVal?e?As?System.EventArgs)?Handles?MyBase.Load
Dim?oRpt?As?New?CrystalReport1()
Dim?dsdataSet?As?New?Dataset1()?
Dim?CN?As?New?Data.SqlClient.SqlConnection("data?source=PMSERVER;initial?catalog=Northwind;user?id=sa;password=sa")
CN.Open()
Dim?daOrders?As?New?Data.SqlClient.SqlDataAdapter("select?*?from?orders",?CN)
daOrders.Fill(dsdataSet,?"orders")?
Dim?daDetails?As?New?Data.SqlClient.SqlDataAdapter("select?*?from?[Order?Details]",?CN)
daDetails.Fill(dsdataSet,?"Order?Details")?
'使用“報表引擎”對象模型將填充的數據集,傳遞給報表
oRpt.SetDataSource(dsdataSet)
CrystalReportViewer1.ReportSource?=?oRpt
End?Sub
8、運行程序
七、用程序改變報表中text的文本
代碼如下:
Dim?GetTextObject?As?TextObject
'?按名稱獲取?ReportObject,將其轉換為?TextObject,并返回此對象。
GetTextObject?=?orpt.ReportDefinition.ReportObjects.Item("text13")
GetTextObject.Text?=?"XXXX系統"
總結:水晶報表具有非常強大的功能,還可進行導出WORD、EXCEL、RTF等文件,還可生成復雜、漂亮圖表,是進行WEB和WINDOWS報表開發的利器。?