rpt水晶報表制作過程


最近公司安排一個以前的項目,里面需要用到水晶報表,由於原來做這個項目的同事離職,所在公司的同事報表做成了rdlc類型的,而這類報表在加載的時候很難動態的從數據庫加載數據,問同事也說不出個所以然,這可怎么辦?項目總不肯能不做吧?沒辦法只能查找rpt文件制作的辦法,原來的微軟自帶的rdlc類型的報表做出來的樣式很難滿足需求,rdlc類型的報表如圖(個人第一次做rpt類型的文件,難免有錯誤,歡迎指正):

                       

我自己也從未做過報表,剛開始用vs不能正常打開原有的rpt文件,打開后全是二進制類型的亂碼,上網百度了一下,沒找到一個完整的解決辦法(大多都說的比較抽象),只是看到大伙都在說vs2010后的版本就沒有提供CrystalReport這個功能,后來看到一個論壇里的一個大哥說要下載CrystalReport這個插件,然后找了一個版本CRforVS_13_0_5下載安裝關閉vs后再重新打開vs新建報表就果真看到了Crystal Report,大家應該都注意到了vs2012並沒有rpt類型的CrystalReport這個類型的報表,需要安裝CrystalReportForVs這個插件,建議下載CRforVS_13_0_5這個版本,下載地址:http://downloads.businessobjects.com/akdlm/cr4vs2010/CRforVS_13_0_5.exe

安裝完成后,務必要關閉vs,然后在打開vs2012,vs2013版本我沒安裝所以不知道是否可以,按說是沒有問題的,因為我安裝的Crystal Report上面顯示是支持vs2010,但實際是我安裝的vs2012也支持。

好了廢話不多說,安裝CRforVS插件時如果你的系統是64位的,CRforVS安裝完成后會自動提示你是否安裝64位的,點擊“是”即可,由於安裝的時間比較長我就不在這兒截圖演示了安裝過程了,安裝成功后,找到右邊的解決方案資源管理器,選擇你要新建.rpt文件的項目,右鍵項目目錄,選擇新建項,彈出一個添加新項的對話框,點擊左側的Reporting然后就可以看到右邊多出來一個Crystal Report項,如圖:

 

點擊添加,彈出如下對話框:

 

從上圖可以看出創建CrystalReport有三種創建方法:使用報表向導導,這種方式通常是新建模板時使用,點擊確認后新建的rpt文件是一個包含報表頭,頁眉,詳細資料,報表尾,頁腳的空模板,里面什么都沒有,需要自己來創建樣式和內容,如果選擇來自於現有的報表則會彈出來一個文本選擇路徑的對話框,找到要作為樣板的rpt文件,點擊確定即可創建一個原有模板的報表,而且里面的字段數據不會丟失。

我們選擇“來自於現有的模板”,其他兩種基本制作方法一樣大同小異,創建成功后會生成一個原有報表的界面,如圖:

 

 

,另外我們的工具箱也會有一個Crystal Reports還會多一個字段資源管理器,如圖:

 

 

我們接下來就是要為報表添加數據源,在左側或者“視圖->其他窗口->數據源”,選擇添加新數據源,會彈出如下圖:

單擊下一步,會彈出:

 

再單擊下一步

 

選擇”新建連接”

 

填好服務器名,選擇好數據庫,測試連接沒問題的話,單擊確定,會回到剛才的窗口,單擊下一步,彈出:

選擇好你要添加的表或者存儲過程,起一個DataSet的名稱,單擊完成,左側數據源就會多出我們剛才添加的數據源(如果沒有就刷新下)

 

接下來隱藏數據源,不用再管它,回到報表窗口,

然后我們可以添加文本,例如我們在報表的頁眉部分添加一個公司名,在報表上右鍵“插入”,選擇“文本對象”鼠標上會出現一個文本框,我們把這個文本框放到我們想要的地方,給他命名為:“公司名稱:”,(也可以插入文本文件,單擊文本框,右鍵選擇“自文本插入”,選擇要讀取的文件即可),右鍵空白處,選擇數據庫專家,彈出對話框

 

最后單擊確定(注意一般右側只能有一個表),

接下來,我們在字段資源管理器中選擇我們要放到報表中的字段,如圖我們選擇companyName字段

 

報表圖中如圖(其他字段一樣):

好了,報表基本制作完成,現在就創建一個WinForm窗體,窗體創建好后,找到左側工具欄里面的ReportViewer控件,拖到窗體上,我們的窗體會變成:

 

如果我們的窗體彈出如下異常,我們就要刪除引用里面的畫線部分的類庫:

 

 

接下來我們就是寫代碼了,

雙擊在Load事件中寫入如下代碼:

        Public Shared Function Query(ByVal SQLString As String) As DataSet

            Using connection As New SqlConnection(connectionString)

                Dim ds As New DataSet()

                Try

                    connection.Open()

                    Dim command As New SqlDataAdapter(SQLString, connection)

                    command.Fill(ds, "ds")

                Catch ex As System.Data.SqlClient.SqlException

                    Throw New Exception(ex.Message)

                End Try

                Return ds

            End Using

        End Function

Private Sub FrmReport_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    Dim sql As String

sql=”select * from outstoragebill”  ‘注意這里的sql語句中的列名必須和上面我們創建的字段管理器中的列名相同

        Dim ds As DataSet = DbHelperSQL.Query(sqlstr)

        Dim count As Int32 = ds.Tables(0).Rows.Count

        For i = 1 To 9 - (count Mod 9)

            ds.Tables(0).Rows.Add(New Object() {""})

        Next

 

 

        Dim rpt As New CrystalReport1()

        'rpt.Load(Application.StartupPath & "RptOutstorage.rpt")

        rpt.Load(Application.StartupPath & "../ CrystalReport1.rpt")’這里的‘CrystalReport1是我們剛剛創建的報表名,到此水晶報表制作完成

        rpt.SetDataSource(ds.Tables(0))

 

        CrystalReportViewer1.ReportSource = rpt

    End Sub

完成后如圖所示:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM