Объект Crystal Report не обновляется после IsPostBack

Это мой код .Net 2 ASP.Net, который работал при размещении на Win 2000 и IIS3.

'В Page_Load, если это НЕ PostBack, удалите кэшированный объект отчета, чтобы позже этот код был вынужден его перестроить.

В Win2000 и IIS3, когда я щелкал ссылку, чтобы загрузить новую страницу, в Page_Load она вызывала Session.Remove("ReportObject"), затем в FillRptParams понимала, что Session("ReportObject") - это Nothing и перезагружала ее.

Сначала я вставил весь код сеанса, чтобы убедиться, что между запросами страниц Crystal Report он не будет продолжать обращаться к базе данных, а просто извлечет объект ReportObject из переменной сеанса, отображающей следующую страницу.

Теперь я перешел на Win 2003 и IIS6. Я ВСЕГДА получаю ОДИН и тот же отчет, даже при нажатии на ссылку, как я использовал, что по существу приводит к тому, что IsPostBack становится ложным и удаляет объект сеанса.

Я надеюсь, что в 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

person DP-Dev    schedule 10.08.2016    source источник


Ответы (1)


Переместите свой код в событие Page_init, а не в page_load. И подавите свой «код обратной передачи if», когда вы его переместили.

person Furtiro    schedule 12.08.2016
comment
Привет. Спасибо за это. Page_Init срабатывает при каждом запуске страницы и удаляет объект Session. Мне нужно, чтобы он обнаруживал PostBack при щелчке элемента управления навигацией по странице Crystal Report и оставлял объект Session в такт. - person DP-Dev; 18.08.2016
comment
Зачем вам нужно воссоздавать объект отчета? CR предназначен для однократного создания, а затем кэширования для перехода между страницами. - person Furtiro; 22.08.2016