ViewState und Persistenz des CrystalReportViewer-Objektmodells

Was ist ViewState?

ViewState ist ein browserbasierter Ansatz in ASP.NET, mit dem der Zustand der Ansicht, d. h. des Web Forms, beibehalten wird. Die primäre Funktion besteht darin, die Persistenz von Websteuerelementen zu unterstützen.

Websteuerelemente (auch Webserversteuerelemente genannt) sind den in Visual Basic eingeführten Windows-Steuerelementen nachempfunden. Bei Windows-Steuerelementen handelt es sich um Objekte auf dem Formular, die einen Teil der Anzeigefunktionalität einschließen, z. B. ein Textfeld, eine Schaltfläche oder eine Datentabelle.

Websteuerelemente sind mit Windows-Steuerelementen vergleichbar. Sie funktionieren wie Windows-Steuerelemente auf zwei Ebenen: innerhalb der Webseite und in der CodeBehind-Klasse, die die Webseite unterstützt. Websteuerelemente schließen, ähnlich wie herkömmliche Steuerelemente in Windows Forms, eigenständige Bestandteile der Anzeigefunktionalität in GUI-Objekte ein: Button, TextField, DropDownList, DataGrid usw. In der CodeBehind-Klasse stehen diesen Steuerelementen entsprechende Klassen gegenüber, die Eigenschaften und Methoden verfügbar machen.

Eine Webseite unterscheidet sich insofern von einem Windows Form, als sich eine Webseite in einer zustandslosen Umgebung befindet. Daher ist ein gewisser Persistenzmechanismus erforderlich, um den Zustand einer Webseite aufrecht zu erhalten, wenn die Seite neu geladen wird.

ViewState behält den Zustand von Steuerelementen auf der Webseite auf nahezu dieselbe Weise bei wie Session den Zustand instantiierter Objekte auf dem Server.

NoteAnmerkung

Durch ViewState wird der Zustand sämtlicher Websteuerelemente automatisch beibehalten. Zu diesem Zweck wird jedes Steuerelement auf der Grundlage seiner EnableViewState-Eigenschaft (die standardmäßig den Wert "True" annimmt) von ViewState gespeichert.

Da ViewState den Zustand der Daten aus den auf der Seite enthaltenen Websteuerelementen speichert, muss das ViewState-Objekt bei der Seitenübertragung zwischen Browser und Webserver vollständig in die Seite eingeschlossen werden. Dazu wird das gesamte ViewState-Objekt als Zeichenfolge verschlüsselt und diese Zeichenfolge dann in den Wert eines ausgeblendeten Formulartags auf der Seite eingefügt. Das ViewState-Objekt einer ASP.NET-Webseite, die lediglich ein einzelnes Button-Steuerelement enthält, verfügt beispielsweise über folgenden HTML-Code:

<input type="hidden" name="__VIEWSTATE"
value="dDwtNTMwNzcxMzI0Ozs+I7GfLyg3p44eTLFCiVEiRKUBzFw=" />

Mit ViewState werden nur Informationen gespeichert, die in das Zeichenfolgenformat konvertiert werden können.

Beibehalten der Berichtanzeige des CrystalReportViewer-Steuerelements

Das CrystalReportViewer-Steuerelement übernimmt für einen Crystal Reports-Bericht die Funktion der Berichtanzeige. Der Bericht wird auf der Seite in HTML-Code gerendert, und es wird eine Symbolleiste und eine Strukturansicht angezeigt, über die die Berichtanzeige angepasst werden kann. Mit den auf der Symbolleiste enthaltenen Schaltflächen kann der Anwender Zoomen, zur nächsten Seite wechseln, drucken, exportieren usw. Die Strukturansicht kann erweitert werden, um geschachtelte Datengruppen anzeigen zu lassen.

Da ViewState die Persistenz von Steuerelementinformationen gewährleistet, wird der Zustand sämtlicher berichtspezifischer Anzeigeinformationen (einschließlich Symbolleisten- und Strukturansichtereignisse) zwischen dem erneuten Laden der Seite für das CrystalReportViewer-Steuerelement beibehalten.

Wenn ein Anwender beispielsweise die dritte Berichtseite anzeigt und auf der Symbolleiste des CrystalReportViewer-Steuerelements auf die Schaltfläche "Nächste Seite" klickt, behält ViewState den Zustand der beiden folgenden Elemente bei:

  • Die aktuelle Seitennummer
  • Den Zustand der Schaltfläche "Nächste Seite" (aktiviert)

Während des Neuladens der Seite setzt ViewState das CrystalReportViewer-Steuerelement wieder auf Seite 3 zurück und stellt dann das Click-Ereignis "Nächste Seite" wieder her, wodurch dann Seite 4 des Berichts vom Steuerelement angezeigt wird.

Beibehalten des Objektmodells des CrystalReportViewer-Steuerelements

Das CrystalReportViewer-Steuerelement hat eine zusätzliche Funktion: Es sorgt nicht nur für die Berichtanzeige, sondern stellt auch ein begrenztes Objektmodell (in der CrystalReportViewer-Steuerelementklasse) bereit. Dieses begrenzte Objektmodell kann für die programmgesteuerte Interaktion mit dem Bericht verwendet werden.

ViewState behält den Zustand beider folgenden Funktionen bei:

  • Der Berichtanzeige
  • Des CrystalReportViewer-Objektmodells

Von der Verwendung des CrystalReportViewer-Objektmodells wird jedoch generell zugunsten des umfassenderen ReportDocument-Objektmodells abgeraten. Dieses alternative Objektmodell ist nicht im Steuerelement enthalten, stellt jedoch einen Bestandteil der SDK-Klassenbibliotheken dar.

NoteAnmerkung

Weitere Informationen finden Sie unter Auswählen des richtigen Objektmodells für Ihr Projekt.

Gemeinsame Nutzung von Persistenzmechanismen

Wenn Sie das CrystalReportViewer-Steuerelement für beide Aufgaben (Berichtanzeige und Objektmodell) verwenden, werden beide von ViewState beibehalten, und Sie benötigen keine zusätzlichen Persistenzmechanismen.

NoteAnmerkung

Ein Beispiel hierfür wäre das Binden des CrystalReportViewer-Steuerelements an einen Dateiverzeichnispfad. Siehe Binden an einen Dateiverzeichnispfad im Code.

Wenn Sie sich jedoch entscheiden, das CrystalReportViewer-Steuerelement lediglich für die Berichtanzeige zu nutzen und das Steuerelement dann an ein externes Objektmodell (z. B. ReportDocument) binden, ist ein separater Persistenzmechanismus erforderlich, um den Zustand dieses externen Objektmodells beizubehalten. Bei diesem zweiten Persistenzmechanismus handelt es sich normalerweise um Session (gelegentlich auch um Cache).

Siehe auch