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 - [email protected]

 

 
.

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)