martes, 7 de octubre de 2008

Ordenar un GridView por sus columnas.

Esto es una técnica básica en la correcta interacción del usuario con una tabla de datos. Que pueda ordenar la tabla de acuerdo a una columna dada, y en orden descendente o ascendente.

Primero nos aseguraremos que nuestro GridView permite ordenaciones y que las columnas permitan ser ordenadas:

<asp:GridView ID="gvGridView" AutoGenerateColumns="false" runat="server" AllowSorting="True">

<Columns>
<
asp:BoundField DataField="Campo" HeaderText="Titulo Columna" SortExpression="Campo" />
Columns>

asp:GridView>

Después utilizaremos dos propiedades que van a persistir los valores de la tabla de datos que alimenta al GridView, para no tener que traer los datos de la base de datos en cada ordenación (cambio ancho de banda por menos llamadas a la base de datos), y el orden ascendente o descendente de la ordenación.

Private Property dtTabla() As DataTable

Get

Return ViewState("dtTabla ")

End Get

Set(ByVal value As DataTable)

ViewState("dtTabla ") = value

End Set

End Property

Private Property orden() As String

Get

Return ViewState("orden")

End Get

Set(ByVal value As String)

ViewState("orden") = value

End Set

End Property

Se supone que en algún punto del código cargamos los datos recuperados de la base de datos dentro de la propiedad dtTabla, para así hacerlos persistentes. Por lo cual lo siguiente que hacemos es el método de ordena()

Private Sub ordena(ByVal campo As String)

If orden = "ASC" Then

orden = "DESC"

Else

orden = "ASC"

End If

dtTabla.DefaultView.Sort = campo & " " & orden

gvGridView.DataSource = dtTabla.DefaultView

gvGridView.DataBind()

End Sub

Aquí lo único de reseñar es que utilizamos el View por defecto que toda DataTable tiene, y lo utilizamos para ordenar y cargar el GridView.

Por último incluimos en el evento de ordenación del GridView la llamada al método ordena.

Protected Sub gvGridView_Sorting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewSortEventArgs) Handles gvGridView.Sorting

ordena(e.SortExpression)

End Sub

7 comentarios:

Anónimo dijo...

hola, muy bueno el blog, si lo deseas , ingresa a mi pagina, a publicar un comentario. saludos

Anónimo dijo...

muy bueno gracias, me simplificaste codigo

;)

Anónimo dijo...

Qué puta mierda de código, ¿simplificar? ja!! Eres casi tan malo como Vaaaaaaaa....llo. Menuda mierda de explicación. Ala!

cibernetiko dijo...

excelente codigo funciono a la primera muchas gracias amigo

saludos

cibernetiko

Anónimo dijo...

Excelente!! funciona muy bien :)

Anónimo dijo...

Saludos y si esta paginado el Gridview ?

Victor dijo...

Podrias proporcionar el codigo completo ?