为SSRS中的每个新报告请求创建或清除Hashtable实例

时间:2015-10-16 20:04:27

标签: vba reporting-services ssrs-2008

我通过VS2008 SSRS完成了上传到我的Reporting Services服务器的报告,当调用事件GenerateReport时(在按钮点击时)调用该报告

现在,我有以下代码:

Public Shared Dim gruposVolTotal As New System.Collections.HashTable()
Public Shared Dim gruposSeleccion As New System.Collections.HashTable()
Public Shared Dim gruposModVenta As New System.Collections.HashTable()

Dim grupoActual as String = "" 

Public Shared Dim acumuladoSeleccion as Double = 0
Public Shared Dim acumuladoVolTotal as Double = 0
Public Shared Dim acumuladoModVenta as Double = 0
Public Shared Dim acumuladoAnterior as Double = 0


Function Acumulador(ByVal MiGrupo as String, ByVal value as Double, ByVal Campo as String) As Double

If (GrupoActual <> MiGrupo) Then

    If (Campo = "ModVenta") then 
        If (not gruposModVenta.Contains(MiGrupo)) then
            acumuladoModVenta =acumuladoModVenta + value
            gruposModVenta.Add(MiGrupo,acumuladoModVenta )
            Return acumuladoModVenta 
        Else
            Return gruposModVenta(MiGrupo)
        End If 
    End If

    If (Campo = "RunningValue") then 

        acumuladoVolTotal=acumuladoVolTotal + value

        If (not gruposVolTotal.Contains(MiGrupo)) then
            acumuladoAnterior = acumuladoVolTotal + acumuladoAnterior
            gruposVolTotal.Add(MiGrupo, acumuladoAnterior)
        End If 

        Return gruposVolTotal(MiGrupo)

    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  

End If



End Function

这有什么问题: 如果你在VS2008上执行此操作,如果我更改页面(请记住在VS2008上),结果是正确的,这些元素仍然存在且很好。 如果您通过Web应用程序执行此操作,第一次将正确执行,但第二次如果您在报表上选择不同的参数,则值将保留为您第一次执行它。

这是因为哈希表的变量和元素都保存在会话中,因此在我关闭网页并再次输入之前,这些哈希表和变量的值在第一次执行后将保持不变。

如果您将变量和Hashtables的范围更改为public,private或直接调暗(私有)每个请求(更改页面,即break页面)将重置变量和哈希表的值。

所以这个想法是利用我发布的代码,但是我在问每次调用报表并更改参数时是否有任何重置或清除哈希表元素的方法。

我在论坛中看到另一个用户为每个请求创建了一个新的哈希表,但这些哈希表不会被垃圾收集,这意味着大量的内存使用。

如果您需要更多信息,请与我们联系。

编辑: 您可以通过ReportViewer Control更改页面。

我尝试使用以下代码:

Protected Overrides Sub OnInit()

gruposVolTotal.Clear()
gruposSeleccion.Clear()
gruposModVenta.Clear()

grupoActual = "" 

acumuladoSeleccion = 0
acumuladoVolTotal = 0
acumuladoModVenta  = 0
acumuladoAnterior = 0

End Sub

但似乎每次更改页面时都会删除它,而不是每次打开报告时都会删除它。

0 个答案:

没有答案