我通过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
但似乎每次更改页面时都会删除它,而不是每次打开报告时都会删除它。