ASP.NET - URGE! Ordenar gridview dinamico

 
Vista:

URGE! Ordenar gridview dinamico

Publicado por Laurea (46 intervenciones) el 19/02/2008 19:29:06
Hola a todos.
Tengo un gridview con la propiedad AutoGenerateColumns = True.
El Datasource del gridview es un datatable que yo relleno en tiempo de ejecucion. Para que me muestre los datos hago databind y todo funciona bien.

Ahora necesito ordenar ese grid según pinche en la cabecera del grid. He puesto la propiedad del grid AllowSorting=true, pero me da error.
Supongo que será porque no he podido decir la expresión de ordenación que va para cada columna, pero si le hago un count a las columnas del grid siempre me da 1, aunque tenga muchas más (creo que es por lo de autogeneratecolumn).

Me da el siguiente error:
GridView 'listResultado' desencadenó el evento Sorting, que no estaba controlado

¿Alguien me puede ayudar?

Muchas gracias!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:URGE! Ordenar gridview dinamico

Publicado por Javier Santamaria (312 intervenciones) el 20/02/2008 12:14:17
Hola,

Intenta cambiar el autogenerate y create las columnas para decirle a cada una de ellas por que ordenar.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:URGE! Ordenar gridview dinamico

Publicado por Laurea (46 intervenciones) el 22/02/2008 10:28:35
Hola Javier.

El grid no tengo mas remedio que hacerlo con autogenerate columns, ya que es un grid que va a representar una sql que va a introducir un usuario, por lo cual puede ser cualquier sql y cualquier numero de columnas.
También tengo el problema de que las fechas las muestra seguida de "00:00:00"

He intentado ir creando en ejecución las columnas, pro no se como.

Cualquier idea me serviría para ir probando, porque estoy desesperada!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:URGE! Ordenar gridview dinamico

Publicado por Javier Santamaria (312 intervenciones) el 22/02/2008 12:15:51
Si son consultas arbitrarias entonces no podras crearlas a mano.

Para el problema de las fechas yo hago esto:

DataFormatString="{0:dd/MM/yyyy}"

pero no se si te servira pues yo utilizo columnas fijas, no autogenerate.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:URGE! Ordenar gridview dinamico

Publicado por Laurea (46 intervenciones) el 22/02/2008 12:20:49
Hola Javier.
Muchas gracias por tu rapidez y por tu intento.

En tiempo de diseño si que lo he hecho otras veces así, pero como antes te comentaba, no puedo crear las columnas en tiempo de diseño.

El tema es que no sé cómo acceder a la propiedad DataFormatString por código, e incluso creo que si consiguiera acceder a esa propiedad, podría también acceder a la propiedad "SortExpresion" y poner el orden.

Muchísimas gracias.

Por favor, cualquier idea por tonta que parezca comentadmela y la probaré.

Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:URGE! Ordenar gridview dinamico

Publicado por x (445 intervenciones) el 22/02/2008 21:38:46
Pues necesitas...

1) Obtener la tabla.
2) En base a a tabla crear las columnas del gridview, y ahi agregar lo de la ordenacion (sin utilizar el AutoGenerateColumns).
3) "Bindear" el GridView.

Asi lo hago yo (mas o menos).

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:URGE! Ordenar gridview dinamico

Publicado por Laurea (46 intervenciones) el 25/02/2008 09:44:26
Hola x, muchas gracias!
Podrias mandarme un ejemplo? Es que no se como "bindear" el grid, he intentado añadir las columnas en ejecución, pero no se el tiempo de objeto ni como hacerlo.

Muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:URGE! Ordenar gridview dinamico

Publicado por Javier Santamaria (312 intervenciones) el 25/02/2008 13:45:06
Hola,

Lo que te dice es que te crees la tabla con un datatable u otro control (no recuerdo los que pueden ser datasources) y luego le asignas ese control como datasource a tu gridview. Despues simplemente se hace gridview.databind() y le asignas las propiedades a las columnas y al sorting.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:URGE! Ordenar gridview dinamico

Publicado por Laurea (46 intervenciones) el 25/02/2008 17:52:12
Hola Javier.

eso ya lo he hecho, pero para poder hacer el sorting tengo que asignarle a cada columna la columna de la tabla por la que ordeno, pero no se como acceder a las propiedades de cada columna. (ya te lo conté en este mismo hilo). Si lo hago así para que me aparezcan las columnas tengo que hacerle un autogeneratecolumn y me salen las columans con lso datos, pero no puedo ordenar. Me dice que solo tiene una columna el datagrid cuando en realidad tiene muchas más. Es por esto por lo que estoy como loca buscando como se agregan las columnas en tiempo de ejecución y asi poder decirle la ordenación.

Gracias por tu ayuda.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:URGE! Ordenar gridview dinamico

Publicado por x (445 intervenciones) el 25/02/2008 21:38:00
Me tardo un poco por la dif de horarios pero ahi esta:

public class MyBoundField
: BoundField
{
public MyBoundField() : base() { }

public MyBoundField(string headertext, string datafield, int width)
: this(headertext, datafield, width, HorizontalAlign.NotSet)
{ }
public MyBoundField(string headertext, string datafield, int width, HorizontalAlign alignment)
: this(headertext, datafield, width, alignment, HorizontalAlign.NotSet)
{ }
public MyBoundField(string headertext, string datafield, int width, HorizontalAlign alignment, HorizontalAlign headeralignment)
{
base.HeaderText = headertext;
base.DataField = datafield;
base.ItemStyle.Width = Unit.Pixel(width);
base.ItemStyle.HorizontalAlign = alignment;
base.HeaderStyle.HorizontalAlign = headeralignment;
}

public MyBoundField(string headertext, string datafield)
{
base.HeaderText = headertext;
base.DataField = datafield;
}
}

MyGridView.Columns.Add(new MyBoundField("Número", "number", 75, HorizontalAlign.Center, HorizontalAlign.Center));

la clase no es necesaria, pero en ese proyecto en todos los grid views lo hacia de esa manera, asi que por eso la clase. Espero te sirva, saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:URGE! Ordenar gridview dinamico

Publicado por x (445 intervenciones) el 25/02/2008 21:44:45
Por cierto, lo demas seria algo asi...

foreach(DataColumn columna in MiTabla.Columns)
{
Aqui accesas a las propiedades DataType, ColumnName, etc, para saber como agregar tu columna, pero hay que hacerlo en cada postback...
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Muchas gracias!

Publicado por Laurea (46 intervenciones) el 07/03/2008 10:21:46
Los chic@s, que tal?

Lo primero, muchas gracias por ayudarme a solucionar mi problema!

Por fin solucioné mi problema. He encontrado una forma diferente de hacerlo, y al menos, más fácil para mí que las soluciones aquí propuestas.
Os pongo el código:

Grid.AutoGenerateColumns = True
Grid.AllowSorting=True

'Me declaro un objeto DataTable que es donde vuelco los datos de mi Select
Dim DTT As New Data.DataTable
Al DTT le asigno su DataSource de la select que me haga falta (yo he usado un tableadapter, y en la SQL un alias del texto que queria que apareciera en la cabecera del grid)

Me declaro un objeto DataView donde tendre los datos volcados y ordenados
Dim Vista As New Data.DataView(DTT)
Vista.Sort = "Campo ASC" ' aqui si quieres descendiente es el Campo DESC

Le asigno el DataView al grid y asi me aparece ordenado
grid.DataSource = Vista
grid.DataBind()

Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Al fin mencionaron al DataView

Publicado por C#ristian (2 intervenciones) el 15/08/2009 17:33:29
Este objeto es muy poco conocido y usado. Cuando uno hace un sort en un gridview, cuando habilitas la ordenación mediante el diseñador, internamente utiliza un dataview para hacer las ordenaciones de los datos en memoria.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar