在RDLC的隐藏详细信息行中使用代码

时间:2016-12-20 18:22:35

标签: vb.net visual-studio-2013 reporting-services rdlc

我正在排查第三方创建的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")

1 个答案:

答案 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