Foros del Web » Programando para Internet » ASPX (.net) »

Ayuda Ordenación de Datagrid

Estas en el tema de Ayuda Ordenación de Datagrid en el foro de ASPX (.net) en Foros del Web. Saludos colegas.. escribo para intentar hallar alguna idea de cómo solucionar mi problema. De una vez indico que ya he navegado horas de horas por ...
  #1 (permalink)  
Antiguo 07/09/2009, 11:20
 
Fecha de Ingreso: septiembre-2009
Mensajes: 31
Antigüedad: 14 años, 7 meses
Puntos: 0
Ayuda Ordenación de Datagrid

Saludos colegas.. escribo para intentar hallar alguna idea de cómo solucionar mi problema.

De una vez indico que ya he navegado horas de horas por foros y blogs buscando una respuesta a lo que necesito pero no encuentro en concreto información que me funcione por la manera en la que estoy trabajando..

Trabajo en C#.NET 2005, con BD SQL SERVER 2005 y en el método de programación por capas... utilizo las 3 básicas, el Common para definición de Objetos, el Data para la interacción con la BD y el Service como enlace entre capas...

Bien, resulta que se me solicitó agregar la ordenación a un DataGrid, la verdad nunca lo he hecho, pero bueno, encontré la propiedad AllowSorting y la establecí en True, desde ahí comencé a tener problemas, mis columnas son de tipo Template, el Grid tiene formato por medio de un CSS y resulta que no quizo convertir los encabezados a Hyperlinks... luego de probar, y probar.... y probar.... al fin di con la propiedad que me faltaba establecer en el HTML, fue así como la columna me quedó así..

<asp:TemplateColumn HeaderText="The Value" SortExpression="ValueColumn">

Perfecto, ya con eso obtengo el clic y capturo el evento SortCommand de mi Datagrid... yo feliz de la vida me dispongo a buscar el método de ordenamiento, que supuse debe ser genérico, como lo es el de la paginación...

Leí por todo lado tanto en español como inglés y me llevé la sorpresa de que en todos los lugares que "explican" la forma correcta, en realidad ninguno explica y ponen código que intentando acoplar a mi proyecto sencillamente no funciona...

Pasa que mi Datagrid tiene como Datasource un Array! el cual lo obtengo desde la estructura de capas... y todos los ejemplos que encuentro realizan el método de ordenación por medio de un GridView... Ok, entonces reviso el GridView y resulta que sólo permite ser "llenado" con un DataTable... entonces me planteé, bueno, voy a convertir el Array que tengo en un DataTable... y bien, fracaso nuevamente... no logro hacerlo, pasa que encontré un método que lo hace en la buena teoría:

DataTable1.LoadDataRow(Array, true)

Pero.... a la hora de llenarlo me dice que la cantidad de columnas de la Tabla es menor a la de la matriz, entonces se me vino a la mente que lo más lógico era que pedía una definición previa de las columnas que utiliza el grid... pero al hacerlo me mantiene el mismo error... entonces no lo comprendo...

En fin, lo normal segun he visto es que los DataTables los llenan con un DataSet, pero en mi caso no me sirve hacerlo así por la estructura que llevo...

Sé obtener el valor del SortExpression y demás, se que directamente el Grid no puede ordenarlos, pero necesito saber si es que soy tan inútil o si de verdad hay algo que no he visto y me pueda funcionar, incluso si se pudiera evitar ese montón de conversiones entre objetos me agradaría, pero si no al menos con que funcione me conformo...

Si alguno tiene alguna idea con todo gusto se lo agradezco...
  #2 (permalink)  
Antiguo 07/09/2009, 12:36
Avatar de mdavila  
Fecha de Ingreso: julio-2007
Ubicación: Montevideo (Uruguay)
Mensajes: 919
Antigüedad: 16 años, 9 meses
Puntos: 13
Respuesta: Ayuda Ordenación de Datagrid

Bueno luego de leer bastante.....

1) Es facil el ordenamiento, solo tenes que capturar el sortcommand que ya comentaste que lo lograste hacer.

2) Tenes que llamar a tu procedimiento con el cual llenas tu grilla pasandole el ordenamiento y volves a generar el databind.

3) guardas el sortcommand en algun lado como por ejemplo un campo oculto ya que si paginas lo vas a necesitar para recordar cual ordenamiento viene llevando.

Me explique?
Suerte.
__________________
Marcelo Davila.

:. En Ignorante te conviertes al no preguntar, el que pregunta se nutre... :.
  #3 (permalink)  
Antiguo 07/09/2009, 12:43
 
Fecha de Ingreso: septiembre-2009
Mensajes: 31
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Ayuda Ordenación de Datagrid

Hola, gracias por atender... Comprendí bien, sólo me queda la duda a la hora de "pasar el ordenamiento" al método que carga el grid... porque no se cómo decirle que ordene los datos.... es decir, si le digo que me lo ordene por la columna "ID", se que debo obtener si es ASC o DESC, pero dónde establecerle esas propiedades... es lo que me queda confuso en realidad...

Última edición por darkandres123; 07/09/2009 a las 12:55
  #4 (permalink)  
Antiguo 08/09/2009, 04:53
Avatar de mdavila  
Fecha de Ingreso: julio-2007
Ubicación: Montevideo (Uruguay)
Mensajes: 919
Antigüedad: 16 años, 9 meses
Puntos: 13
Respuesta: Ayuda Ordenación de Datagrid

Muchas formas tenes de decirle si es asc o desc.....

Podes tener dos campos ocultos, el sort y el asc, desc (todo esto porque no queres tener en tu grilla las clasicas flechitas en los cabezales, aunque se que esto es bastante complicadito jejeje.)

Podes poner por defecto asc, asi que sabes que la primera carga es asi. (ej. select * from tabla order by id desc)

En tu procedimiento de llenado de grilla podes colocar dos parametros.
Claro que antes de llamarlo tenes que comparar los campos del nuevo sort que pide el cliente con los que tenes guardados en tus dos campos ocultos.

Si el sort es el mismo es que quiere ordenamiento inverso de ese mismo campo entendes.
Si el sort es otro, haces como al comienzo y le pones orden asc por defecto.
Siempre vas guardando el nuevo ordenamiento en tus campo ocultos para comparar en cada postback.


Public Sub LlenarGrilla(Sort as string, Asc as Boolean)
'aca capturas tus parametros y otras cosas mas que seguro tenes que hacer.

Dim Orden as String = String.Empty
If Asc Then
Orden = " Asc"
Else
Orden = " Desc"
End If

Dim Cmd as New SqlCommand("Select * from TuTabla order by " & Sort.Trim & Orden, TuConexion)

'luego llenas tu grilla con tu nuevo ordenamiento

End Sub


Espero se entienda.
Saludos.
__________________
Marcelo Davila.

:. En Ignorante te conviertes al no preguntar, el que pregunta se nutre... :.
  #5 (permalink)  
Antiguo 08/09/2009, 10:11
 
Fecha de Ingreso: septiembre-2009
Mensajes: 31
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Ayuda Ordenación de Datagrid

Perfecto Marcelo gracias por tu ayuda, en conclusión sería entonces el mismo SQL el que lo ordena a final de cuentas, no el .NET... eso me ayuda mucho... intentaré darle solución con esta información... Saludos!
  #6 (permalink)  
Antiguo 08/09/2009, 10:14
Avatar de mdavila  
Fecha de Ingreso: julio-2007
Ubicación: Montevideo (Uruguay)
Mensajes: 919
Antigüedad: 16 años, 9 meses
Puntos: 13
Respuesta: Ayuda Ordenación de Datagrid

Claro, es el SQL el que te resuelve el ordenamiento en este caso.
Se podria hacer tambien manteniendo un DataTabla en memoria pero eso es otro tema.

Suerte.
__________________
Marcelo Davila.

:. En Ignorante te conviertes al no preguntar, el que pregunta se nutre... :.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:14.