Monday, July 26, 2010

Allowsorting: gridview (ASP.NET)

Si tu grilla está enlazada desde código, el sorting u ordenamiento no funciona de la misma manera a como si estuviera enlazado desde la vista de diseño a un origen de datos (DataSourceID).

Por ejemplo, en el evento Sorting del gridview, este pedazo de código no funciona: (es decir, siempre se va al ASC y no entra al DESC) Pero para el segundo caso sí, porque... El GridView alternará de forma automática entre "ASC" o "DESC" en SortExpression en cada clic, para conmutar entre orden de clasificación ascendente o descendente.

Dim strOrderBy As String = e.SortExpression
Select Case e.SortDirection

Case SortDirection.Ascending
strOrderBy = strOrderBy + " ASC"
Me.prcCargarPersonas(strOrderBy)
Case SortDirection.Descending
strOrderBy = strOrderBy + " DESC"
Me.prcCargarPersonas(strOrderBy)
End Select

Para el primero, lo arreglé de esta manera (utilizando una variable de state)

Dim strOrderBy As String = e.SortExpression

Select Case Me.ViewState("Orden")
Case "ASC"
strOrderBy = strOrderBy + " ASC"
Me.prcCargarPersonas(strOrderBy)
ViewState("Orden") = "DESC"
Case "DESC"
strOrderBy = strOrderBy + " DESC"
Me.prcCargarPersonas(strOrderBy) 'este es mi método que carga y bindea mi
grilla
ViewState("Orden") = "ASC"
Case Else
strOrderBy = strOrderBy + " ASC"
Me.prcCargarPersonas(strOrderBy)
ViewState("Orden") = "ASC"
End Select

Todo dentro del evento SORTING del gridview. Previamente, se le añade la propiedad a tu gridview AllowSorting="True" y por cada columna a utilizar para el sort, se le añade la propiedad SortExpression="NombreColumnaBaseDeDatos"