Ordenando un GridView mediante el evento Sorting (El GridView y sus eventos: El evento Sorting)

Una de las operaciones típicas a realizar con un GridView, es ordenar la información que muestra, ahora vamos a ver como hacerlo mediante el evento Sorting, cuando se ejecuta, cual es su finalidad y que es lo que nos aporta.

Tengo que decir tambien, que junto con el evento RowDataBound para manipular la información antes de hacer el binding y el evento PageIndexChaning para paginar el GridView, este es uno de los más usados.

Como ya hemos visto anteriormente el GridView es un control que nos proporciona ASP.NET cuya funcionalidad es “trabajar” con información tabular. Seguramente es uno de los controles más usados y a lo lardo de las distintas versiones de Visual Studio, ha cambiado el nombre, pero siempre se ha mantenido. Este control, es muy pesado y consume gran cantidad de memoria pero aporta mucha funcionalidad que muchas veces no llegamos a aprovechar porque generalmente lo usamos para mostrar información (entendamos que hablo de aplicaciones Web).

Este post forma parte de una serie de post llamada El GridView y sus Eventos. Los post que forman esta serie y que si has llegado aquí te pueden interesar son:

El evento Sorting.

El control GridView, como vamos viendo tiene mucha funcionalidad implementada, y parte de esta, es la  capacidad de ordenación de sus resultados, lo cual es muy útil. El evento Sorting, salta cada vez que pulsamos en un link de ordenación, pero antes de que se haya realizado la susodicha ordenación.

Para poder ordenar los resultados mostrados en un GridView, tenemos que setear a true la propiedad AllowSorting y además a cada una de las columna que le hayamos indicado en el tag Columns, tenemos que indicarle cual va a ser su SortExpression y su HeaderText. El SortExpression es la expresión que vamos a ir utilizando para identificar porque columna queremos ordenar los datos y el HeaderText, es el texto que vamos a mostrar.

Veamos un ejemplo, primero el control GridView que tendría este aspecto:

<asp:GridView
ID="gvCities"
runat="server"
DataKeyNames="CityCode"
CssClass="cssTableGrid"
AutoGenerateColumns="False"
AllowPaging="true"
AllowSorting="true"
PageSize="15"
OnRowDataBound="GvCities_RowDataBound"
OnPageIndexChanging="GvCities_PageIndexChanging"
OnSorting="GvCities_Sorting">
<AlternatingRowStyle CssClass="cssTRAlternatingStyle" />
<Columns>
<asp:TemplateField HeaderText="Ciudad" SortExpression="Name" >
<ItemTemplate>
<asp:Literal ID="ltrlName" runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="País" SortExpression="CountryName">
<ItemTemplate>
<asp:Literal ID="ltrlCountry" runat="server" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>

Como podeis ver, la propiedad AllowSorting la hemos seteado a true, y además cada una de las columnas tienen dos campos el SortExpression y el HeaderText.

Ahora veamos el aspecto que tiene el evento:

protected void GvCities_Sorting(object sender, GridViewSortEventArgs e){}

Como argumentos, recibe el objeto que lo lanza y los GridViewSortEventArgs desde los cuales podemos acceder a la dirección (SortDirection) y la expresión que estamos usando (SortExpression).

A partir de aquí, cada uno tendrá que implementar su ordenación, en mi caso como estamos usando unas listas de entidades como fuente de datos, las he ordenado de dos formas distintas, una con linq y la otra con la ordenación que aportan los genéricos.

Ordenación por medio de linq.

Las ordenaciones con linq son muy simples, únicamente tenemos que indicarle el campo por el que queremos ordenar mediante una lambda expression.

Para ordenar de forma ascendente sería algo así:

cityList.OrderBy(c => c.Name).ToList();

Y para ordenar de forma descendente sería:

cityList.OrderByDescending(c => c.Name).ToList();

Entiendase que c es del tipo City.

Ordenaciones por medio del metodo Sort de las listas genericas.

Los genéricos y listas de objetos tienen un método implementado por el cual podemos ordenar, en el tenemos que llamar a un delegado que es el que realiza la ordenación.

Una ordenación ascendente por medio de genéricos sería algo así:

cityList.Sort(delegate(City x, City y) { return string.Compare(x.Country.Name, y.Country.Name); });

Y si una ordenación descente sería igual pero cambiando el lado de los objetos a comparar:

cityList.Sort(delegate(City x, City y) { return string.Compare(y.Country.Name, x.Country.Name); });

Y hasta aquí llegamos hoy, con este evento cerramos un ciclo ya que de los eventos del GridView que vamos a ver, el RowDataBound, el PageIndexChanging y el Sorting, seguramente son los más usados aunque los que iremos viendo próximamente nos dejan realizar muchas operaciones de una forma sencilla y eficiente.

Post relacionados.

Este post forma parte de una serie de post llamada El GridView y sus Eventos. Los post que forman esta serie y que si has llegado aquí te pueden interesar son:

Descargas – Downloads.

Un pensamiento en “Ordenando un GridView mediante el evento Sorting (El GridView y sus eventos: El evento Sorting)

  1. El GridView y sus eventos: El RowDataBound « a deshoras

Deja un comentario