Ordenando un GridView enlazado a un ObjectDataSource

Deberían saber en principio que si el método de seleccionar (SelectMethod) del ObjectDataSource, devuelve un DataSet, un DataTable o un DataView, tenemos de manera automática la capacidad de hacer ordenamiento en el GridView.

Y cuando pasemos el mouse por la parte superior hacemos clic y se ordena :o, y si eso lo pones dentro de un UpdatePanel, sin comentarios.

Si ustedes han personalizado las columnas del GridView, se han podido dar cuenta que no funciona el ordenamiento. Por más que ponemos la propiedad AllowSorting igual "True" del GridView y nada...

Empiezas con la búsqueda de la verdad, para saber que pasa y porque no ordena tu GridView, la paginación dentro del UpdatePanel, te dejo alucinado y quieres como sea el ordenamiento, llegas al siguiente artículo: Sorting Data with Data Source Controls.

Te dice lo que ya sabías que si tu método de seleccionar te devuelve un DataTable, un DataView, o un DataSet el ordenamiento es automático. Compruebas eso, cambias tu DataTable a DataView y nada, y te das cuenta qué el último artículo había unas propiedades del ObjectDataSource, que te dejaron meditando si era por eso o no:

   artRowIndexParameterName="StartRecord"  y  MaximumRowsParameterName="MaxRecords"

Modificas intentas forzar a tu ObjectDataSource, pero nada, y es así que sigues en la búsqueda, ya se volvió personal lograr el ordenamiento, aunque este fuera de los requerimientos de usuario :), y es que tu deseo de saber más, y saber que pasa, es lo único que te impulsa a seguir en la búsqueda.

Llegas a unos foros: GridView sorting possibility, y en una de las respuestas ves:

   public getData(int startIDX, int maxRWS)

Y dices, creo que me estoy acercando a la solución (no sabes que estás más perdido que...)

Ahora llegas al siguiente artículo: Implement Paging using ObjectDataSource with GridView, ves una nueva propiedad del ObjectDataSource que no habías visto, SelectCountMethod, y dices me falto esto. Y para verificar te bajas el código de ejemplo del artículo, no tienes usuario, te registras desesperadamente, porque piensas que ahí esta tu respuesta. Te registraste, te logueaste, y te bajaste el código fuente. Ves un DataView, y dices eso me faltaba, eso era... Actualizas tu código y nada... y ya te vas dando cuenta que no era la solución, pero tu quieres ver la ordenación dentro de UpdatePanel así que sigues en la búsqueda.

Y llegas al siguiente artículo: Sorting Custom Paged Results, y ves un nuevo atribulo del gridView:

   SortParameterName="sortExpression"

Entonces comienzas a intentar, incrustarlo dentro de tu código, pero nada. Y dices, pero la teoría dice que si el método Select devuelve un DataTable, DataSet, o DataView, el ordenamiento es automático, pero para nada funciona, y es cuando piensas que deberías crear un artículo "Los Secretos ocultos del GridView".

Ya con la moral baja y después de haberle echo de todo a ObjectDataSource, empiezas desde cero creas un SqlDataSource con GridView, funciona la paginación y el ordenamiento automático, y es así que decides probar nuevamente generando un GridView desde cero con un nuevo ObjectDataSource, y no lo puedes creer pero funciona lo malo es que las columnas del GridView fueron autogeneradas, copias tu nuevo ObjectDataSource, con tu anterior GridView, pero nada... y te das cuenta que tu ObjectDataSource, funciona, ósea lo maltrataste por gusto, pero entonces ahora te la agarras con el GridView. Y como tu editastes tu código en vista HTML, es decir no usaste el wizard gráfico de editar columnas, no te distes cuenta de esta pequeña propiedad:

Y es que no sólo basta con poner la propiedad AllowSorting del GridView igual a True, sino que cada columna se debe personalizar para habilitar el ordenamiento, además te de das cuenta que lo puedes personalizar mucho más.

Conclusiones: Si bien el ordenamiento y paginación del ObjectDataSource puede ser automático y rápido de desarrollar, excluyendo este post :$, si la cantidad de filas es muy grande puede ser que la performance de tu aplicación disminuya: Al final de este artículo hay unos resultados muy interesantes: Sorting Custom Paged Results, como se puede apreciar la paginación automática es mas lenta, ya que siempre trae todos los registros, en cambio con una paginación por grupos, la performance es mejor, ya que sólo trae los registros que necesita y no todos. También se aprecia que si agregamos índices a la ordenación la performance mejora.

Más artículos sobre ordenamiento personalizado con el ObjectDataSource:

Saludos,


Post cruzado
Published 25/1/2007 18:16 por Sergio Tarrillo
Archivado en: ,
Comparte este post:
http://geeks.ms/blogs/sergiotarrillo/archive/2007/01/25/9256.aspx

Comentarios

# Tips para usar el ObjecDataSource como fuente de datos

Como ustedes saben ahora existen diversos controles DataSource para el enlace a datos en una aplicación

Thursday, February 15, 2007 5:32 AM por SergioTarrillo's RichWeblog

# re: Ordenando un GridView enlazado a un ObjectDataSource

por que no pones un ejemplo de como se hace en vez de escribir 30 paginas de como no se hace.

Tuesday, October 23, 2007 4:34 PM por ss

# re: Ordenando un GridView enlazado a un ObjectDataSource

pues lo he intentado pero no me funciona

Monday, December 31, 2007 10:39 PM por magnus

# re: Ordenando un GridView enlazado a un ObjectDataSource

Oye ya he intentado hacerlo yo traigo un store procedure y no me deja ordenarlo.

Monday, February 25, 2008 10:15 PM por martin lopez hernandez

# re: Ordenando un GridView enlazado a un ObjectDataSource

Muy bueno el artículo, aunque hubiese estado mejor si terminabas con la solución bien detallada. Gracias de todos modos.

Thursday, January 08, 2009 8:38 PM por Marcelo

# re: Ordenando un GridView enlazado a un ObjectDataSource

muy bueno el articulo sergio, pero no consigo aun la solucion... si puedes porfavor coloca un ejemplo...

Saludos...

Monday, April 06, 2009 3:01 PM por elperucho

# re: Ordenando un GridView enlazado a un ObjectDataSource

He estado apunto de probar tantas o más cosas de las que indicas y gracias a este artículo me las he ahorrado, gracias.

Tuesday, April 21, 2009 6:50 PM por Victor

# re: Ordenando un GridView enlazado a un ObjectDataSource

Buen articulo pero alguien sabe donde hay un ejemplo de esto como hacerlo??

Friday, May 08, 2009 2:40 PM por vladimir

# re: Ordenando un GridView enlazado a un ObjectDataSource

men no puedo levantar mi componengonegocio en mi pagina web la primera ves con objectadatasource levanto pero ahora no puedo

Monday, September 21, 2009 2:05 AM por victor

# re: Ordenando un GridView enlazado a un ObjectDataSource

jajaja para nada util tu gran articulo.

Monday, July 05, 2010 10:51 PM por asd

# re: Ordenando un GridView enlazado a un ObjectDataSource

Hermano me ahorraste toda esa carreta.

muchas gracias.

Friday, October 15, 2010 7:00 AM por Andreso