Compartir a través de


ViewState y persistencia del modelo de objetos CrystalReportViewer

¿Qué es ViewState?

ViewState es un enfoque basado en explorador de ASP.NET para conservar el estado de la vista, es decir, el formulario Web Forms. Su función principal es apoyar la persistencia de los controles Web.

Los controles Web (también denominados controles de servidor Web) se crean basándose en los controles de Windows, que se presentan en Visual Basic. Los controles de Windows son objetos del formulario que encapsulan una parte de la funcionalidad de presentación, como un campo de texto, un botón o una tabla de datos.

Los controles Web son parecidos a los controles de Windows. Al igual que los controles de Windows, funcionan en dos niveles: dentro de la página Web y en la clase de código subyacente que respalda la página Web. Del mismo modo que los controles tradicionales en Windows Forms, los controles Web encapsulan elementos concretos de funcionalidad de presentación en objetos de GUI: Button, TextField, DropDownList, DataGrid, etc. En la clase de código subyacente, estos mismos controles se comparan con las clases que exponen propiedades y métodos.

La diferencia entre una página Web y un formulario Windows Form es que la primera es un entorno independiente. Por lo tanto, se necesita algún tipo de mecanismo de persistencia para conservar el estado de la página Web durante sus recargas.

ViewState mantiene el estado de los controles de la página Web, tanto como Session mantiene el estado de los objetos de los que se ha creado una instancia en el servidor.

Nota

ViewState mantiene el estado de todos los controles Web automáticamente. Esto se consigue haciendo que ViewState almacene todos los controles basados en la propiedad EnableViewState del control (cuyo valor predeterminado es true).

Puesto que ViewState almacena el estado de los datos de los controles Web en la página, todo el objeto ViewState debe estar contenido en la página cuando ésta se transfiere una y otra vez entre el explorador y el servidor Web. Este proceso se lleva a cabo cifrando todo el objeto ViewState como cadena y, a continuación, colocando esta cadena dentro del valor de una etiqueta de formulario oculta en la página. Por ejemplo, ViewState para la página Web de ASP.NET que contiene sólo un único control de botón tiene el siguiente código HTML:

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

ViewState almacena sólo información que se puede convertir a formato de cadena.

Persistencia de la presentación del informe del control CrystalReportViewer

El control CrystalReportViewer desempeña la función de presentación del informe para un informe de Crystal. Presenta el informe en html en la página junto con una barra de herramientas y una vista de árbol para manipular la presentación del informe. La barra de herramientas contiene botones para acercar y alejar, pasar a la siguiente página, imprimir, exportar, etc. La vista de árbol se expande para mostrar agrupamientos de datos anidados.

ViewState conserva la información del control; por tanto, conserva el estado de toda la información de presentación del informe (incluidos los eventos de la barra de herramientas y la vista de árbol) del control CrystalReportViewer durante las recargas de página.

Por ejemplo, si un usuario estuviese viendo la página 3 del informe e hiciese clic en el botón de página siguiente de la barra de herramientas del control CrystalReportViewer, ViewState conservaría el estado de ambas partes de la información:

  • El número de página actual.
  • El estado del botón Página siguiente (en el que se ha hecho clic).

Durante la recarga de la página, ViewState restauraría el control CrystalReportViewer en la página 3 y, a continuación, haría lo mismo con el clic del evento de la siguiente página para que el control se mueva a la página 4 del informe.

Persistencia del modelo de objetos del control CrystalReportViewer

El control CrystalReportViewer lleva a cabo una función adicional: no sólo la visualización de informes, sino también un modelo de objetos limitado (incluido en la clase de control CrystalReportViewer). Este modelo de objetos limitado se puede utilizar para la interacción mediante programación con el informe.

ViewState conserva el estado de ambas funciones:

  • La presentación del informe.
  • El modelo de objetos CrystalReportViewer

Sin embargo, se suele desaconsejar el uso del modelo de objetos CrystalReportViewer, en favor del modelo de objetos ReportDocument más completo. Este modelo de objetos alternativo no está contenido en el control sino que forma parte de las bibliotecas de clases del SDK.

Nota

Para obtener más información, vea Elegir el modelo de objetos correcto para el proyecto.

Compartir los mecanismos de persistencia

Si utiliza el control CrystalReportViewer para desempeñar ambas funciones (presentación del informe y modelo de objetos), ViewState las conserva, y no necesita mecanismos de persistencia adicionales.

Nota

Un ejemplo sería enlazar el control CrystalReportViewer a una ruta de directorio de archivos. Vea Enlazar a una ruta de directorio de archivos en el código.

Sin embargo, si prefiere utilizar el control CrystalReportViewer sólo para la función de presentación de informes y, a continuación, enlazar el control a un modelo de objetos externo (como ReportDocument), es necesario un mecanismo de persistencia independiente para conservar dicho modelo de objetos externo. Normalmente, este segundo mecanismo de persistencia es Session (u ocasionalmente, Cache).

Vea también