我正在排查第三方创建的RDLC文件。他们在报告中有一些VB.NET代码,详细行中的表达式调用代码定义的函数。该函数不返回任何数据;它只是填充一个数组。详细信息行中没有其他内容,行本身也是隐藏的。
在摘要组的页脚中,还有两个表达式调用函数,这些函数使用第一个函数填充的数组。如果细节行可见,那些功能可以正常工作。如果隐藏详细信息行,则表达式返回#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")
答案 0 :(得分: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
因此,您可以在详细信息行上将Hidden属性设置为Code.HidProp(all_params,hide:True)。我没有看到你说有一些条件,你在详细信息行上设置隐藏属性,但这个额外的参数让你有机会不打电话你的功能,如果你想在详细信息行中调用函数,或者你可以从详细信息中删除调用并始终从隐藏属性调用HidProp,然后您可以在不使用if-then-else的情况下调用您的函数。
这样,您可以强制报告来评估每个明细行的代码。
我在MS连接上找到了一个关于此的答案,所以也许这些线索也可以帮助你: https://connect.microsoft.com/SQLServer/feedback/details/354787/reporting-services-rc0-hidden-code-not-executing