2016-12-20 49 views
0

我正在解決由第三方創建的RDLC文件。他們在報表中有一些VB.NET代碼,並且詳細信息行中的表達式正在調用由代碼定義的函數。該函數不返回任何數據;它只是填充一個數組。細節行中沒有其他內容,並且行本身是隱藏的。在RDLC的隱藏詳細信息行中使用代碼

在摘要組的頁腳中,還有兩個表達式調用使用由第一個函數填充的數組的函數。如果詳細信息行可見,則這些功能正常工作。如果詳細信息行被隱藏,則表達式會返回#Error。它似乎沒有調用該函數,並且數組保持空着。

我修改了細節行儘可能小,但有相當多的行被返回,所以我得到了相當多的空白。 有沒有辦法隱藏細節行,仍然有從報告代碼調用函數?

我發現下面這個問題似乎是我之後的問題,但我不認爲受訪者會理解這個問題。

Hide a row in RDLC report without disabling the code execution

我使用Visual Studio 2013年我明白任何建議。謝謝。

編輯:

以下是報告的代碼段,如果它可以幫助澄清這一情況。

public dim TranDate(0) as DateTime 
public dim CashFlow(0) as Double 
public dim BFCashFlow(0) as Double 

public dim RowCount as Int32=0 

Public Function PrepairCashFlowArray(byval myTrandate as Date,ByVal myCashFlow as Double,ByVal myBFCashFlow as Double) 

Redim Preserve TranDate(RowCount) 
Redim Preserve CashFlow(RowCount) 
Redim Preserve BFCashFlow(RowCount) 

TranDate(RowCount)=myTrandate 
CashFlow(RowCount)=myCashFlow 
BFCashFlow(RowCount)=myBFCashFlow 

RowCount =RowCount +1 

End Function 

Public Function GetNETIRR() as Double 

Return ((IRR(CashFlow, -0.1)+1)^4-1) * 100 

End Function 

Public Function GetGROSSIRR() as Double 

Return ((IRR(BFCashFlow, -0.1)+1)^4-1) * 100 

End Function 

下面是詳細的行表達式。

=code.PrepairCashFlowArray(Fields!perfdate.Value,Fields!cashflow.Value,Fields!bfcashflow.Value)

這裏有兩個摘要行表達式(它們是相似的)之一。

="Net of Fee IRR: ="&format(code.GetNETIRR(),"##,#0.#0")

+1

我很困惑。如果您想要隱藏詳細信息行,爲什麼不建立一個查詢來提供摘要值並跳過vba代碼? – SMM

+0

因爲IRR函數需要一個數組作爲第一個參數。 –

回答

1

沒有針對此問題沒有乾淨的解決方案,因爲不評估或不執行在隱藏對象表達式或代碼是自2008年版本的特徵。在SSRS和reportviewer 2005的日子裏,您可以將代碼的執行放在隱藏對象中,並且通常會對其進行評估或執行,但之後他們決定對其進行更改。

這是一個黑客攻擊,但是你可以創建另一個函數,該函數的參數與PrepairCashFlowArray的參數相同,並且可能還有一個參數用於在需要時切換Hidden屬性。所以,你可以這樣做:

Function HidProp(byval myTrandate as Date,ByVal myCashFlow as Double,ByVal myBFCashFlow as Double, byval hide as Boolean) 
    If hide Then ...call PrepareCashFlowArray with same parameters... 
    Return hide 
End Function 

所以,你可以在細節排隱藏的屬性設置爲Code.HidProp(all_params,隱藏:真)。我還沒有看到你說過,有一些條件可以在詳細信息行中設置隱藏屬性,但是如果您想讓呼叫在詳細信息行中起作用,則此額外參數可讓您有機會不調用您的函數,或者您可以從詳細信息中刪除呼叫,並始終從隱藏屬性中調用HidProp,然後您可以在不使用if-then-else的情況下調用您的函數。

通過這種方式,您可以強制報告評估每個明細行的代碼。

我發現這個人回答在MS連接,所以也許這些線索可以幫助您也: https://connect.microsoft.com/SQLServer/feedback/details/354787/reporting-services-rc0-hidden-code-not-executing

+0

謝謝你的回答。最終,我的客戶決定放棄報告的這一部分,但如果我們繼續前進,我可能會選擇基於SQL的解決方案。但我可能會在稍後回顧一下,看看它是如何工作的。 –

相關問題