Pages

Subscribe:

Ads 468x60px

Labels

2013年9月17日 星期二

水晶報表使用法

最近接到的案子是用.NET 2003+Crystal Report, 用水晶報表不是第一次了,
這次把所學到讀到的筆記整理下來讓之後的自己可以參考
當然也謝謝敎我幫我debug的同事b大囉

建立步驟:
1.      建立水晶報表的模板
在專案中按右鍵à加入新項目à Crystal Reportà加入一個空白報表並設計出自己想要的格式
2.      建立資料集
在專案中按右鍵à加入新項目à資料集à加入一空白資料集
點進該資料集將報表所要顯示的資料表結構定義在此(最簡單的方法即是利用伺服器總管直接拖拉出想要的資料表結構定義再慢慢調整)

資料集中的皆只是資料結構定義非實體的資料用處在於將此資料定義放入水晶報表的模板中實體的資料會在程式中即時run出來
3.      在水晶報表中放置資料欄位
回到水晶報表點開後在左方的欄位總管” 定義該報表的資料來源為2.的資料集(如下圖一)
作法按右鍵à新增/移除資料庫更多的資料來源àADO.NET(XML)à建立新的連結 按兩下會跳出一視窗讓我們輸入XML檔路徑在此輸入2.做好的XSD檔的路徑
 

部落格專用相簿





部落格專用相簿




選好後該節點下就有剛資料集的資料如果該資料集有多個資料表也可以在此看到選取所要顯示在報表上的資料表並移到右邊的選取的資料表方框按下確定

做好後資料庫欄位節點下就會顯示出剛剛連好的資料集我們就可以使用該資   料集下的欄位囉(用法:直接將要顯示的欄位拖拉至報表中所想要顯示的位置)

做好後資料庫欄位節點下就會顯示出剛剛連好的資料集我們就可以使用該資料集下的欄位囉(用法:直接將要顯示的欄位拖拉至報表中所想要顯示的位置)
4.      AP中寫程式連結報表
再網頁中拖拉進一個CrystalReportViewer跟一個DataGrid
Page_Loa中寫下列程式連結報表
(要先引入CrystalDecisions.CrystalReports.EngineCrystalDecisions.Shared這兩個命名空間)
Dim myconn As SqlConnection = New  SqlConnection("Server=SERVER;Database=DB;UID=User;PWD=;")
        Dim cmd As New SqlCommand
        Dim conn As String
        myconn.Open()
        '先將資料撈出顯示於Gridview
        Dim sql As String
        sql = "Select UserID from TSUser where UserId <='008'"
        cmd.CommandText = sql
        cmd.Connection = myconn
        Dim ds As New DataSet
        Dim adp As New SqlDataAdapter
        adp.SelectCommand = cmd
        adp.Fill(ds)
        Me.DataGrid1.DataSource = ds
        Me.DataGrid1.DataBind()
        '將資料顯示於水晶報表
        Dim MyReport As New CrystalDecisions.CrystalReports.Engine.ReportDocument
        MyReport.Load(Server.MapPath("CrystalReport2.rpt"))
        Dim i As Integer
        MyReport.Database.Tables.Item(0).SetDataSource(ds.Tables(0))
        Me.CrystalReportViewer1.DisplayGroupTree = False
        Me.CrystalReportViewer1.ReportSource = MyReport
        Me.CrystalReportViewer1.DataBind()
5.      存檔執行
就會發現報表已順利產生出來囉

6.      將報表轉成EXCEL
      程式寫法:

  ‘顯示於網頁
        Me.CrystalReportViewer1.DisplayGroupTree = False
        Me.CrystalReportViewer1.ReportSource = MyReport
        Me.CrystalReportViewer1.DataBind()
換成
'輸出成EXCEL
Dim diskOpts As CrystalDecisions.Shared.DiskFileDestinationOptions = New         CrystalDecisions.Shared.DiskFileDestinationOptions
MyReport.ExportOptions.ExportDestinationType = CrystalDecisions.Shared.ExportDestinationType.DiskFile
MyReport.ExportOptions.ExportFormatType = CrystalDecisions.Shared.ExportFormatType.Excel
'設置磁碟選項
diskOpts.DiskFileName = "D:rpt_testcoffee_rpt.xls"
MyReport.ExportOptions.DestinationOptions = diskOpts
MyReport.Export()
寫入EXCEL資料夾權限部分要設定,將網站資料夾的「安全性」開放給ASPNET, 否則會出現 拒絕存取報表檔。其他程式可能正在使用該檔案錯誤
因為我的OSXP, 如果登入者非網域帳號時在設定資料夾權限時會找不到安全性頁籤此時要進"控制台-->資料夾選項-->檢視à使用簡易檔案共用(建議選項)”前方的打勾勾掉不要選頁籤就會出現了
如果出現 匯出 DLL 偵測到錯誤” , 可能是OS修補檔SP2的問題可以參照JOHOYA的作法C:Program FilesCommon FilesCrystal Decisions1.0Bin底下的ExportModeller.dll(9.1.1.527換成9.1.1.528
(我測試的結果是就算是改成英文語系灌了修補檔那個9.1.1.528版的ExportModeller.dll還是出不來無法只好去網路上下載)

P.S.水晶報表模版也可以直接連資料庫
如果直接連的話就要在程式中再指定資料庫連線字串
但這樣的作法只能直接撈出該資料表所有的資料無法照自己的意思只顯示自己要的資料
        '將資料顯示於水晶報表
        Dim MyReport As New CrystalDecisions.CrystalReports.Engine.ReportDocument
        Dim logOnInfo As New CrystalDecisions.Shared.TableLogOnInfo ‘連結資料庫
        MyReport.Load(Server.MapPath("CrystalReport2.rpt"))
        Dim i As Integer
       ‘指定資料庫連結資料
        logOnInfo.ConnectionInfo.ServerName = "ServerName"
        logOnInfo.ConnectionInfo.DatabaseName = "DatabaseName"
        logOnInfo.ConnectionInfo.UserID = " UserID"
        logOnInfo.ConnectionInfo.Password = " Password "
        MyReport.Database.Tables.Item(0).ApplyLogOnInfo(logOnInfo)
        Me.CrystalReportViewer1.DisplayGroupTree = False
        Me.CrystalReportViewer1.ReportSource = MyReport
        Me.CrystalReportViewer1.DataBind()


 資料來源

沒有留言:

張貼留言