2016-08-10 47 views
0

这是我的.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 

回答

0

将您的代码移到Page_init事件中,而不是在page_load中。 当你移动它时,压制你的“如果回传代码”。

+0

嗨。谢谢你。 Page_Init正在触发页面的每次运行并删除Session对象。当Crystal Report页面导航控件被点击时,我需要它检测一个PostBack,并保留Session对象。 –

+0

为什么你需要重新创建你的报告对象? CR旨在创建一次,然后缓存在页面之间导航 – Furtiro