2013年11月13日 星期三

[Crystal Report] 新手入門包 - 加參數

其實從第一集開始,應該可以看出一些端倪:我們會變動的資料都是從DataSet那裡來的。
不過有的時候我們的需求可沒有這麼簡單。

常見的情況還有……我們的標題會有條件式的變動、我們的報表頭有一些要從外部自由輸入的字串、報表尾巴有一些什麼統計數據會從外部輸入的數字來做加加減減的,甚至是報表中間的細目的某某欄位是從外部輸入的參數與其它欄位加加減減出來的。

所以我們會需要一個可以從外部輸入參數的方法。

--我們先來看報表--

在報表上其實很簡單:左邊那個欄位總管一點開,裡面有個參數欄位,在它上面點右鍵按新增,就可以加參數欄位啦。
通常我在操作這個動作的時候通常是做顯示用的而已,沒有運算,只會去改它的名稱。如果要拿它來加加減減做統計的話要把類型從字串改成數字。

然後就看你那個參數要加多少有多少。


做到這兒,再把參數欄位拉到報表就可以了。

--再來看看程式怎麼弄--


直接拿下面的程式去貼就好了。
下面的程式可以放在Utils裡面,需要的時候Call一下就有了。
其中:Report就是我們前一集提到的ReportDocument;ParameterName就是你在報表裡設定的參數名稱;Value就是這個參數的值。
    ''' 
    ''' 設定報表裡的靜態參數
    ''' 
    ''' ReportDocument
    ''' 參數名稱
    ''' 參數值
    ''' 
    Public Shared Sub SetParameter(ByRef Report As ReportDocument, ByVal ParameterName As String, ByVal Value As Object)
        '這段程式直接從其它地方原封不動抄過來。如果有可有效或可讀性更高的寫法,歡迎修改。
        'Add by Break 2013/09/18

        Dim crParameterFieldDefinitions As ParameterFieldDefinitions = Report.DataDefinition.ParameterFields
        Dim pfd As ParameterFieldDefinition = crParameterFieldDefinitions(ParameterName)
        Dim pdv As ParameterDiscreteValue = New ParameterDiscreteValue
        pdv.Value = Value
        Dim pv As ParameterValues = New ParameterValues
        pv.Add(pdv)
        pfd.ApplyCurrentValues(pv)
    End Sub

什麼時候呼叫它呢?我自己是在宣告ReportDocument、Set完DataSource之後和輸出報表之前。供大家參考:)。

沒有留言: