这是我的.Net 2 ASP.Net代码,用于在Win 2000和IIS3上托管时使用。Crystal Report对象在IsPostBack后不刷新
'在Page_Load中,如果它不是PostBack,则删除缓存的报表对象,以便后面的代码被强制重建。
在Win2000和IIS3下,当我点击一个链接加载页面新鲜时,在Page_Load中它会调用Session.Remove(“ReportObject”),然后在FillRptParams中实现Session(“ReportObject”)为Nothing并重新加载它。
我最初将所有会话代码放入以确保Crystal Report页面之间的请求不会继续访问数据库,它只会从会话变量中拖出ReportObject显示下一页。
现在我已经切换到Win 2003和IIS6我总是得到相同的报告,即使点击链接,因为我以前基本上导致IsPostBack为false并删除Session对象。
我希望它可能会在IIS6下的一些设置,可以使它的行为与以前一样。
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If Not Page.IsPostBack Then
Session.Remove("ReportObject")
End If
End Sub
Sub FillRptParams(ByVal snavcode As String, Optional ByVal CrystalOrPDForEXCEL As String = "")
If Not Session("ReportObject") Is Nothing Then
bReportCached = True
Else
bReportCached = False
End If
oSqlCmd = New SqlCommand
If bReportCached Then
orpt = Session("ReportObject")
Else
orpt = New rptUsageSummaryNew
oSqlCmd.CommandText = "HOSP_RPT_UsageAllSummary"
oDS = oDataAccess.GetReportDataSet(Session("Group"), oSqlCmd)
orpt.SetDataSource(oDS)
'Cache the report object so we don't have to load it again next time
Session.Remove("ReportObject")
Session.Add("ReportObject", orpt)
End If
End Sub
嗨。谢谢你。 Page_Init正在触发页面的每次运行并删除Session对象。当Crystal Report页面导航控件被点击时,我需要它检测一个PostBack,并保留Session对象。 –
为什么你需要重新创建你的报告对象? CR旨在创建一次,然后缓存在页面之间导航 – Furtiro