我在SSRS报告中有以下代码
Public Dim GrupoActual as String = ""
Public Dim acumulado as Double
Public Dim acumulado2 as Double
Public Function Acumulador(ByVal MiGrupo as String, ByVal value as Double, ByVal Campo as String) As Double
If (GrupoActual <> MiGrupo) Then
If (Campo = "VolumenTotal")
acumulado2=acumulado2 + value
Return acumulado2
End If
If (Campo = "VolumenSeleccion")
acumulado=acumulado + value
Return acumulado
End If
GrupoActual=MiGrupo
End If
End Function
问题是,每个累加器的值会在每个分页符上重置,解决此问题的一种方法是将整个报告放在一个页面中,这是不可能的。
我在另一个论坛中看到的另一件事是将变量声明为Public Shared
这个问题就是当我想导出到Excel时所有值都加倍时,即使它适用于分页符。
有没有办法在每次分页时绕过这个问题并保留值?
修改 我绕过这个问题的方法是将我的数据保存在哈希表中:
Public Shared Dim gruposVolTotal As New System.Collections.HashTable()
Public Shared Dim gruposSeleccion As New System.Collections.HashTable()
Public Shared Dim GrupoActual as String = ""
Public Shared Dim acumuladoSeleccion as Double = 0
Public Shared Dim acumuladoVolTotal as Double = 0
Public Function Acumulador(ByVal MiGrupo as String, ByVal value as Double, ByVal Campo as String) As Double
If (GrupoActual <> MiGrupo) Then
If (Campo = "VolumenTotal") then
If (not gruposVolTotal.Contains(MiGrupo)) then
acumuladoVolTotal=acumuladoVolTotal + value
gruposVolTotal.Add(MiGrupo,acumuladoVolTotal)
Return acumuladoVolTotal
Else
Return gruposVolTotal(MiGrupo)
End If
End If
If (Campo = "VolumenSeleccion") then
If(not gruposSeleccion.Contains(MiGrupo)) then
acumuladoSeleccion=acumuladoSeleccion + value
gruposSeleccion.Add(MiGrupo, acumuladoSeleccion)
Return acumuladoSeleccion
Else
return gruposSeleccion(MiGrupo)
End If
End If
GrupoActual=MiGrupo
End If
End Function
所以每次我都会因为分页而改变页面,我的数据不会改变,因为现在它们的值已经存储在哈希表中,并带有正确的密钥。
答案 0 :(得分:0)
我愿意猜测,因为你正在使用全局变量,它们被意外引用并因此在其他地方被改变,这就是全局变量的问题。您很可能需要通过代码step来确定变量何时发生变化以及更广泛的环境中可能导致此变化的情况。
在模块的开头使用Option Explicit
也可能会有所帮助,这有助于您解决许多涉及变量标识符的常见错误。
通常,对全局变量的依赖是匆忙设计的症状。仔细考虑程序流程,看看是否有办法获得您想要的结果并消除那些全局变量,这样就可以防止整个系列问题成为可能。