2016-08-10 3 views
0

Das ist mein .Net 2 ASP.Net-Code, der früher funktionierte, wenn er auf Windows 2000 und IIS3 gehostet wurde.Crystal Report-Objekt wird nach IsPostBack nicht aktualisiert

'In Page_Load, wenn es kein PostBack ist, dann entfernen Sie das zwischengespeicherte Berichtsobjekt, so dass der Code später neu erstellt werden muss. Wenn ich in Win2000 und IIS3 auf einen Link geklickt habe, um die Seite frisch zu laden, würde ich in PageLoad Session.Remove ("ReportObject") aufrufen, dann in FillRptParams die Session ("ReportObject") auf Nothing setzen und neu laden.

Ich legte zunächst den gesamten Session-Code ein, um sicherzustellen, dass zwischen Crystal Report-Seitenanforderungen nicht weiter zur DB gegangen würde, sondern einfach das ReportObject von der Sitzungsvariablen zur nächsten Seite.

Jetzt habe ich auf Win 2003 und IIS6 geschaltet Ich bekomme IMMER den gleichen Bericht serviert, auch wenn ich auf den Link wie ich verwendet, was im Wesentlichen verursacht IsPostBack falsch und entfernen Sie das Session-Objekt.

Ich hoffe, dass es einige Einstellungen unter IIS6, die es sich wie gewohnt verhalten können.

 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 

Antwort

0

Verschieben Sie den Code im Pageinit-Ereignis, nicht in page_load. Und unterdrücken Sie Ihre "wenn Postback-Code", wenn Sie es verschoben haben.

+0

Hallo. Danke dafür. Page_Init wird bei jedem Seitenlauf ausgelöst und entfernt das Session-Objekt. Ich muss ein PostBack erkennen, wenn auf das Seitennavigationssteuerelement Crystal Reports geklickt wird, und das Sitzungsobjekt intakt lassen. –

+0

Warum müssen Sie Ihr Berichtsobjekt neu erstellen? CR wurde so entworfen, dass es einmal erstellt und dann zwischengespeichert wird, um zwischen den Seiten zu navigieren – Furtiro

Verwandte Themen