Asp .NET:
Base de datos de Access en un control DataGrid

[Separando el código HTML y el código Visual Basic en 2 archivos diferentes]

Fecha: 28/Ene/2004 (28/01/2004)
Autor: Miliuco - emi@miliuco.com

 

 
.

Continuando con mis ejercicios anteriores Agenda telefónica en Visual Basic .NET (conexión a una base de datos de Access usando el método más sencilo, el Asistente para formulario de Datos del IDE de Visual Studio) y Agenda telefónica 2 en Visual Basic .NET (el mismo ejercicio pero escribiendo "a mano" todo el código de enlace de los datos a los controles del formulario, usando DataBinding), en esta ocasión usaremos la tecnología Asp .NET para mostrar el origen de datos en un control especializado llamado DataGrid, del que nos provee ADO .NET. El DataGrid usa DataBinding (enlace de datos a controles) de una manera potente y permite una gran funcionalidad. Es un control complejo que no debe ser usado cuando hay un número pequeño de registros que manejar, pero aquí intentaremos precisamente enseñar su uso, aunque la base de datos elegida tiene solamente unas pocas docenas de registros.

A continuación haré una brevísima introducción a Asp .NET y unos comentarios acerca de este ejercicio, mediante estos 7 apartados:

  1. INTRODUCCIÓN A ASP .NET
  2. CONFIGURACIÓN DE ASP .NET
  3. COMPONENTES BÁSICOS DE UNA PÁGINA ASP .NET
  4. SEPARACIÓN DE CÓDIGO VB Y CONTENIDO HTML
  5. ESPACIOS DE NOMBRES Y HERENCIA
  6. ORIGEN DE LOS DATOS
  7. CONTROL DATAGRID PERSONALIZADO
  8. APLICACIÓN ASP .NET EN FUNCIONAMIENTO
  • INTRODUCCIÓN A ASP .NET: ASP .NET significa Páginas Activas de Servidor .NET (Active Server Pages .NET). Es una tecnología para generar páginas dinámicas en el servidor y enviarlas al cliente (navegador Web) que las ha solicitado, ejecutando previamente el código que contienen (código Visual Basic, C#, etc.) y convirtiendo el resultado a código HTML, que es el único que puede interpretar adecuadamente el cliente.
    La clave de este proceso es que, a diferencia de la navegación clásica en que el sevidor espera (escucha) peticiones del cliente y, cuando las recibe, envía automáticamente la respuesta (generalmente un documento HTML que es mostrado en el navegador Web), aquí el servidor ejecuta algún tipo de procesamiento a raíz de la petición del cliente y elabora dinámicamente la respuesta que devuelve. En esquema sería:

    • El cliente (explorador Web) se conecta al servidor Web gracias a su URL
    • El cliente envía una petición al servidor (solicita una página Web). El cliente puede ejecutar código (en el lado del cliente), con secuencias de comandos que se utilizan para generar efectos dinámicos en el cliente (DHTML). Este código no se procesa en el servidor
    • El servidor busca la página solicitada y ejecuta el código contenido en ella. Este código del lado del servidor se escribe en secuencias de comandos (para tareas simples) pero también en lenguajes compilados (Visual Basic, C#, etc., para tareas complejas como son cálculos matemáticos, recuperación de datos, gestión de sitios, comercio electrónico, etc.)
    • El servidor traduce el resultado de la ejecución del código a HTML y lo envía al cliente
    • El cliente muestra al usuario el documento recibido. Si el usuario consulta el código fuente del documento que visita, no verá el código original del archivo que reside en el servidor, sino solamente código HTML en que la tecnología ASP .NET ha convertido el resultado del procesamiento

  • CONFIGURACIÓN DE ASP .NET: para poder ejecutar páginas ASP .NET se necesita:

    • IIS (Internet Information Server): está disponible para Windows NT, Windows 2000, Windows XP Profesional y Windows .NET 2003. Dado que ASP .NET es una tecnología de servidor, requiere un servidor Web en ejecución, de ahí la necesidad de IIS.
      Teóricamente no se puede utilizar en Windows XP Home ya que no aparece como opción en Agregar y quitar elementos de Windows pero, mediante unas maniobras sencillas, sí es posible instalarlo en sistemas con Windows XP Home de manera que los poseedores de este sistema operativo también pueden aprender ASP .NET (consulta ésto)
    • SDK (Kit de Desarrollo de Software) de .NET Framework: está disponible para Windows NT con SP6a, Windows 2000, Windows XP y Windows .NET 2003. Sin este componente, el servidor Web por sí mismo no es capaz de interpretar adecuadamente las páginas ASP .NET. La instalación de Visual Studio .NET conlleva automáticamente la del SDK de .NET Framework.

    Las páginas ASP .NET tienen la extensión aspx. Para visualizar adecuadamente una página aspx no basta con ejecutarla con doble clic o abrirla desde el explorador Web, de ambas maneras el documento se visualiza defectuosamente. Para que la página aspx funcione, debe ser filtrada por el servidor Web, por lo que es necesario dirigir el navegador Web a http://localhost (dirección de la máquina local) y ahí a la dirección correcta del archivo aspx.

  • COMPONENTES BÁSICOS DE UNA PÁGINA ASP .NET:

    • En la primera línea destaca la directiva

      <%@ Page Language="Vb" %>

      que dice al servidor Web que se trata de una página ASP .NET y que usa Visual Basic .NET como lenguaje de programación. También podría ser

      <%@ Page Language="Cs" %>

      en caso de usar C# como lenguaje de programación.

    • Después de la directiva @ Page vienen bloques de declaración de código, en lenguaje Visual Basic .NET, incluidos en la etiqueta

      <script runat=server><script>

      Aquí es donde debe ir todo o la mayor parte del código Visual Basic ya que este código es el único compilado a MSIL

    • Después comienza el código HTML. Este código, junto con el resultado del código ASP .NET, es enviado al cliente. En esta sección puede haber bloques proveedores de código con instrucciones adicionales en ASP .NET, estos bloques van entre las etiquetas <% y %> y no son compilados por lo que son menos eficientes que los bloques de declaración de código

    • Es fundamental tener una etiqueta Form con el atributo runat=server, ello convierte al formulario en un Formulario Web que es supervisado por ASP .NET

    • A lo largo del la página pueden aparecer elementos conocidos de HTML pero que se declaran de manera especial:

      <asp:textbox runat=server></asp:textbox>

      Son controles Web, con algunas funcionalidades similares a las de los elementos HTML del mismo nombre pero con otras añadidas por ASP .NET

  • SEPARACIÓN DE CÓDIGO VB Y CONTENIDO HTML: En muchas ocasiones es útil mantener el contenido HTML de las páginas fuera del código Visual Basic, aumenta la legibilidad del código fuente de los archivos y facilita su modificación por el programador. Se pueden usar formularios con código de apoyo, llevando a estos formularios o archivos de código *.vb todo el código Visual Basic del archivo aspx y declarando en ellos versiones públicas de los controles de servidor que se usan en la página. Por ejemplo, para una etiqueta llamada lbEtiqueta en el archivo aspx, se puede escribir en el archivo de código:

    Public lbEtiqueta As Label

    de esa manera, el control de servidor lbEtiqueta (Label) de la página aspx es una instancia de la variable lbEtiqueta de la clase datagridVb declarada en el archivo vb y, desde el código de la clase, se puede acceder a las propiedades del control a pesar de encontrarse en 2 archivos diferentes.

    En este ejercicio se utiliza un archivo externo como código de apoyo:

    • la página Asp .NET datagrid.aspx contiene solamente código HTML con controles de servidor
    • el archivo de código de apoyo datagrid.aspx.vb contiene el código Visual Basic .NET con declaraciones de variables y procedimientos

    Ambos archivos han de estar juntos en la misma carpeta para que funcione el código actual pero, como se verá más adelante, pueden estar situados en carpetas diferentes. El archivo datagrid.aspx necesita de estos atributos en la directiva @ Page al comienzo del código:

    • Si se trabaja fuera del entorno RAD de Visual Studio .NET (ej: editor de texto y servidor Web), se usa el atributo Inherits, que define la clase que hereda la página aspx (puede ser cualquier clase derivada de la clase Page), y el atributo Src, que especifica el archivo de código fuente en el que se define la clase heredada (es compilado dinámicamente cuando se solicita la página aspx); este archivo puede estar situado en cualquier carpeta del servidor, sólo hay que especificarlo correctamente en la ruta.
      Así es como debe ser configurado al colocar las páginas en el servidor Web:

      <%@ Page Language="vb" Inherits="datagridVb" Src="datagrid.aspx.vb" %>

      (aquí la página aspx hereda la clase datagridVb, que está descrita en el archivo datagrid.aspx.vb, que es compilado en tiempo de ejecución)

    • Si se trabaja en un entorno RAD como Visual Studio .NET, se usa el atributo Codebehind, que especifica el nombre del archivo compilado que contiene la clase asociada con la página (el diseñador de formularios Web Forms de Visual Studio .NET usa este atributo para averiguar dónde se encuentra la clase derivada de Page, de forma que pueda crear una instancia de la misma para que se pueda trabajar con ella en tiempo de diseño) (Codebehind no se usa en tiempo de ejecución), y el atributo Inherits, que define la clase que hereda la página aspx.
      Así es como debe ser configurado mientras se trabaja con la página dentro de Visual Studio .NET:

      <%@ Page Language="vb" Codebehind="datagrid.aspx.vb" Inherits="datagrid.datagridVb" %>

      (aquí la página aspx utliiza el atributo Inherits para heredar la clase derivada de Page, la clase datagridVb, descrita en el archivo datagrid.aspx.vb, que es precompilado en segundo plano para poder probar la página a medida que se va construyendo)

  • ESPACIOS DE NOMBRES Y HERENCIA: A su vez, en el archivo de código de apoyo datagrid.aspx.vb, hay que importar determinados espacios de nombres, necesarios para utilizar ASP .NET, que no es necesario especificar cuando todo el código va en la página aspx (Asp .NET lo hace automáticamente por nosotros) y también heredar la clase Page (de System.Web.UI) al declarar la clase datagridVb:

    Imports System
    Imports
    System.Web
    Imports
    System.Web.UI
    Imports
    System.Web.UI.WebControls

    Public
    Class datagridVb : Inherits Page

    En este ejercicio en concreto también han de importarse los espacios de nombres Data y Data.OleDb para permitir el uso de ADO .NET:

    Imports System.Data
    Imports System.Data.OleDb


  • ORIGEN DE LOS DATOS: Se utiliza un origen de datos sencillo de Microsoft Access de una sola tabla. La base de datos, llamada Agenda 2.mdb, debe estar en C:\ para que el ejercicio funcione con su código actual, pero se puede modificar fácilmente en el archivo datagrid.aspx.vb:

    'ruta = Server.MapPath("/carpeta_del_servidor_web/Agenda 2.mdb")
    ruta = "C:\Agenda 2.mdb"

  • CONTROL DATAGRID PERSONALIZADO: El control DataGrid utiliza columnas para mostrar los datos con un diseño de cuadrícula. De forma predeterminada, el control DataGrid elige automáticamente el tipo de columna y muestra una columna por cada campo de la tabla origen, pero es sencillo modificar ese comportamiento y adaptarlo a nuestras necesidades.
    En este ejercicio, los datos son mostrados en un DataGrid de aspecto personalizado (colores, tipo de letra, título de columnas, etc.), en páginas de 9 registros cada una con botones numéricos de navegación entre las páginas, es el paginado del DataGrid, cuya configuración se realiza en el código de definición del DataGrid mediante las etiquetas

    AllowPaging="True" PageSize="9"

    y configurando las opciones de navegación entre las páginas con

    <PagerStyle pagebuttoncount="4" mode="NumericPages"></PagerStyle>

    pero que por sí sólo no funcionará si no se añade un procedimiento asociado al evento OnPageIndexChanged del DataGrid, en ese procedimiento es en el que hay que activar que el índice de página mostrada por el DataGrid coincida con el índice pulsado en los botones de navegación.
    Por ejemplo, en el ejercicio actual, al declarar el DataGrid rejilla en la página aspx se usaría entre sus atributos

    <...OnPageIndexChanged="rejilla_IndexChanged"...>

    y en el archivo vb se definiría el procedimiento rejilla_IndexChanged:
    Sub rejilla_IndexChanged(ByVal obj As Object, ByVal e As DataGridPageChangedEventArgs)
            rejilla.CurrentPageIndex = e.NewPageIndex
            rejilla.DataBind()
        End Sub

ir al índice

Fichero con el código de ejemplo (Miliuco_datagrid - Tamaño 10.9 KB)