Paginar DataSet Fecha: 02/Nov/2004 (02 de Noviembre de 2004)
|
Hola a todos de nuevo, en esta ocasión voy a explicar como paginar los resultados de una sentencia SQL, utilizando para ello un DataSet. Para obtener la información nos conectaremos a una base de datos es SQL Server (El fichero zip incluye el script de la tabla) y el nombre de la BB.DD es indiferente. La cadena de conexión la agregaremos al Web.config.
Manos a la obra!!!
Creamos un proyecto Web en C# desde Visual Studio .NET y añadimos un WebForm llamado default.aspx. A continuación pasamos a la vista de html e insertamos las siguiente directivas:
<%@ Import Namespace="System.Data.SqlClient" %>Insertamos entre las etiquetas <HEAD></HEAD> el siguiente código para dar un aspecto bonito a los resultados.
<%@ Import Namespace="System.Configuration" %>
<%@ Import Namespace="System.Data" %><style> .TDMIO { FONT: 70% verdana, arial, helvetica, sans-serif } A:link { COLOR: #28469a; TEXT-DECORATION: none } A:visited { COLOR: #28469a; TEXT-DECORATION: none } A:hover { COLOR: #e03f7b; TEXT-DECORATION: blink } </style>Una vez insertada la etiqueta de estilos vamos con el código de la aplicación. Este código irá entre las etiquetas <% %> y dentro a su vez de las etiquetas
<form id="default" method="post" runat="server"></form>// Variable enteras para recorrer con 2 for el DataSet int mniFor; int mnjFor; // Nº de registros visibles por página(Tamaño de paginación) int mnPaginacion = 5; // Nº de página actual int mnNumPag=1; // Nº total de páginas int mnTotalPags=0; // Variable entera para reazlizar cálculos int mnCont; // Almacena el Nº de registros restantes para mostrar en la última página int mnResto; // Variable entera para saber el hasta donde va el for int mnHastaFor; // Variable entera para saber el valor inicial del primer indice del for int mnDesdeFor; // Nombre de la tabla const string sTabla = "USUARIOS"; // Variables para el acceso a SQL SERVER string cadConexion = null; string sQuery = null; SqlConnection conn; SqlDataAdapter data; DataSet datos; // Obtenemos la cadena de conexión cadConexion = (String)ConfigurationSettings.AppSettings["strConnect"]; // Creamos la sentencia SQL sQuery = "SELECT * " + " FROM " + sTabla; // Establecemos la conexión con SQL Server conn = new SqlConnection(cadConexion); data = new SqlDataAdapter(sQuery,conn); // Creamos el objeto DataSet datos = new DataSet(); // Rellenamos el DataSet data.Fill(datos, sTabla); // Almacenamos el Nº de página actual if (Request.QueryString["pag"] != null) { mnNumPag = int.Parse(Request.QueryString["pag"]); // Si es menor que 0, la página actual será la primera if (mnNumPag < 0) { mnNumPag = 1; } } // Almacenamos el Nº de filas de la consulta mnCont = datos.Tables[sTabla].Rows.Count; // Si existen resultados if (mnCont > 0) { // Calculamos el Nº total de páginas while (mnCont > 0) { mnCont -= mnPaginacion; mnTotalPags++; } // Si el resto de registros es menor que el tamaño de paginación minimo // incrementamos el total de páginas en 1 y almacenamos el Nº de registros // restantes en la variable mnResto if (mnCont > 0) { mnTotalPags++; mnResto = mnCont; } // Calculamos hasta donde llegará el primer indice del for mnHastaFor = mnNumPag * mnPaginacion; // Calculamos el valor inicial del primer indice del for mnDesdeFor = mnHastaFor - mnPaginacion; // Si el valor hasta el que llegará el indice del for es // mayor que el número de filas if (mnHastaFor > datos.Tables[sTabla].Rows.Count) { // Recalculamos los indices mnHastaFor = datos.Tables[sTabla].Rows.Count; mnDesdeFor = ((mnNumPag - 1) * mnPaginacion); } // Pintamos la tabla con los datos Response.Write("<TABLE cellSpacing=0 cellPadding=0 border=0 class=TDMIO align='center' width='90%'>"); Response.Write("<TR bgcolor=#3c65c0>"); Response.Write("<TD width='33%' align=center><FONT color=#ffffff>STRONG>Nombre</STRONG></FONT></TD>"); Response.Write("<TD width='33%' align=center><FONT color=#ffffff>STRONG>Apellidos</STRONG></FONT></TD>"); Response.Write("<TD width='33%' align=center><FONT color=#ffffff>STRONG>Teléfono</STRONG></FONT></TD>"); Response.Write("</TR>"); // Pintamos los resultados for (mniFor = mnDesdeFor; mniFor < mnHastaFor; mniFor++) { Response.Write("<TR bgcolor=#EBF0FC>"); for(mnjFor = 0; mnjFor < datos.Tables[sTabla].Columns.Count; mnjFor++) { Response.Write("<TD width='33%' align=center>" + datos.Tables[sTabla].Rows[mniFor][mnjFor] + "</TD>"); } Response.Write("</TR>"); } Response.Write("</TABLE>"); // Pintamos los números de las páginas y recalcamos en que página se encuentra el usuario Response.Write("<TABLE align=center class=TDMIO>"); Response.Write("<TR>"); for (mniFor = 1; mniFor <= mnTotalPags; mniFor++) { if (mniFor == mnNumPag) { Response.Write("<TD><A HREF=default.aspx?pag=" + mniFor + "><FONT color=#e03f7b><STRONG>" + mniFor + "</STRONG></FONT></A></TD>"); } else { Response.Write("<TD><A HREF=default.aspx?pag=" + mniFor + ">" + mniFor + "</A></TD>"); } } Response.Write("</TD>"); Response.Write("</TABLE>"); } // Mostramos un mensaje indicando al usuario que no hay datos else { Response.Write("<TABLE cellSpacing=0 cellPadding=0 border=0 class=TDMIO align='center' width='90%'>"); Response.Write("<TR>"); Response.Write("<TD align=center><FONT color=#e03f7b><STRONG>No se han encontrado coincidencias</STRONG></FONT></TD>"); Response.Write("</TR>"); Response.Write("</TABLE>"); }El fichero Web.Config
Por último nos queda añadir al fichero Web.config la información sobre la cadena de conexión. Para ello lo editamos y añadimos la siguiente información dentro de las etiquetas <configuration></configuration>:
<appSettings> <add key="strConnect" value="data source=SERVIDOR;initial catalog=BASE DE DATOS;password=LA TUYA;persist security info=True;user id=EL TUYO;packet size=4096" /> </appSettings>Los resultados:
Aquí os muestro un pequeño detalle:
Espero que os sirva. Un Saludo.
Fichero con el código de ejemplo: luis_paginarDataset.zip - Tamaño 19 KB