viernes, 20 de abril de 2007

Paginación Alfabética en GridView



Muchas páginas nos cargan de ejemplos de GridView paginados con enumeraciones del 1 hasta el de rango que tiene de datos y hasta nos ponen con símbolos como esto << , < > , >> indicando que los datos siguen …pero ninguna nos muestra como hacerlo alfabéticamente es por eso que ahí va un ejemplo de cómo hacer.

Paso 1.-Agregar un Label y un GridView ala pagina.

Paso 2.-Borrar el Text del Label y poner en true la propiedad ShowFooter del GridView y si gustas le pones un Auto formato al GridView.

Paso 3.-Importamos las Clases Data y SqlClient

Imports System.Data
Imports System.Data.SqlClient

Paso 4.-Declaramos las Variables.

Private Dst As New DataSet()
Private Tabla As DataTable

Paso 5.-Creamos la función CargarGridView con un parámetro opcional para cuando la pagina cargue mande el valor por defecto que nosotros creemos conveniente en este caso va ah ser la letra A para listar en el GridView.

Private Sub CargarGridView(Optional ByVal AZ As String = "")
Dim Cns As String = "data source=.;initial catalog= Northwind;uid=sa;pwd="
Dim Con As New SqlConnection(Cns)
Dim Dap As SqlDataAdapter
If AZ = "" Then
Dap = New SqlDataAdapter("Select ProductName,UnitPrice From Products where ProductName Like 'A%'", Con)
Else
Dap = New SqlDataAdapter("Select ProductName,UnitPrice From Products where ProductName Like '" & LCase(AZ) & "%'", Con)
End If
Dap.Fill(Dst, "Producto")
'si nustro dataset tiene filas los muestra en el gridview
'ya paginado

If Dst.Tables("Producto").Rows.Count > 0 Then
GridView1.DataSource = Dst
GridView1.DataBind()
LblCantidadRegistro.Text = ""
Else
'y si es que no lo tiene le damos una tabla vacia al gridview y por ende
'nos muestra los datos anteriores y mandamos un mensaje
'indicando que no hay registros ya que si no hacemos esto el gridview
'no se va ah ver en la pagina.

Tabla = New DataTable
GridView1.DataSource = Tabla
LblCantidadRegistro.Text = "No hay Registro"
End If
End Sub


Paso 6.-Llamamos la función CargarGridView al cargar la Pagina.

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not Page.IsPostBack Then
CargarGridView()
End If
End Sub


Paso 7.-Mientras crea las filas de datos, en el Footer del GridView se crea los LinkButton de la A-Z dando como Nombre del comando ‘AZ’.

Protected Sub GridView1_RowCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowCreated
If e.Row.RowType = DataControlRowType.Footer Then
e.Row.Cells.Clear()
Dim tc As New TableCell()
'combinamos la columna a 2 ya que nuestro dataset tiene dos columnas
'el valor varia de acuerdo alas columnas que vas a mostrar en tu gridview

tc.ColumnSpan = 2
'Creamos la fila combinada en el gridview
e.Row.Cells.Add(tc)
Dim i As Integer
'sacamos los valores de la A-Z en ASCII
'que empieza del 65 al 90 para luego mostrar
'en su equivalente en letra

For i = 65 To 65 + 25
Dim Link As New LinkButton()
Dim Lc As New LiteralControl()
Lc.Text = " "
Link.Text = Chr(i)
Link.CommandName = "AZ"
Link.CommandArgument = Chr(i)
'vamos agregando el LinkButton con su nombre
'ala fila creada

tc.Controls.Add(Link)
tc.Controls.Add(Lc)
Next
End If
End Sub


Paso 8.-Para paginar haciendo clic en los LinkButton se programa en el evento RowCommand del gridview solo capturamos en nombre del LinkButton y ordenamos llamando la función CargarGridView en este caso ya dando un valor.

Protected Sub GridView1_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles GridView1.RowCommand
If e.CommandName = "AZ" Then
CargarGridView(e.CommandArgument)
End If
End Sub


Si quieres remplazar los LinkButton por Button solo cambia el nombre de la clase ejemplo.
Ubicamos esta línea:
Dim Link As New LinkButton()
Y los reemplazamos por
Dim Link As New Button()


Eso es todo….espero haber podido ayudarlos




3 comentarios:

-=DJ=- Creando Musica dijo...

q tal saludos oie podrias poner algo de como crear las descargar en asp.net 2.0, lo que pasa es que no me sale... y otra cosa mas estoy tratando de hacer un maestro detalle y tanpoco, podrias poner algo de eso?
gracias saludos

-=DJ=- Creando Musica dijo...
Este comentario ha sido eliminado por el autor.
Anónimo dijo...

Es un muy buen Blog mi estimado..sigue asi solo asi seras mas grande ;)