Ordenacion en un DataGrid

08/12/2004 - 22:13 por griss | Informe spam
Hola !

Estoy peleandome con un datagrid, el cual quiero ordenar
por medio de unas de sus columnas, en el lado del cliente
tengo el siguiente codigo:

cliente:

<asp:BoundColumn DataField="modalidad"
HeaderText="Modalidad" SortExpression="Modalidad">

donde ya estableci la propiedad AllowSorting = true;

Ahora en el servidor tengo lo siguiente:

private void grid_SortCommand(object source,
System.Web.UI.WebControls.DataGridSortCommandEventArgs e)
{
tabla2 = (DataTable)Odatagrid.Consultar ();
DataView dv = new DataView (tabla2);
dv.Sort = e.SortExpression;
grid.DataSource = dv;
grid.DataBind();
}

ok cuando le doy click en la Modalidad se ordena por
orden alfabetico mi columna pero al utilizar la
paginacion la ordenacion se pierde.

que mas tengo que hacer para que esto funcione?
les agradeceria mucho si me orientaran un poco.

grisss
saludos!

Preguntas similare

Leer las respuestas

#1 A.Poblacion
09/12/2004 - 07:37 | Informe spam
Probablemente para hacer la paginación habrás metido en el evento
PageIndexChanged un trozo de coódigo que vuelve a leer la tabla y a hacer un
databind. En ese código tendrás que intercalar un Dataview y ponerle el
"Sort" igual que has hecho en el evento SortCommand.


"griss" wrote in message
news:061d01c4dd6a$b57ff3f0$
Estoy peleandome con un datagrid, el cual quiero ordenar
por medio de unas de sus columnas, en el lado del cliente
tengo el siguiente codigo:

cliente:

<asp:BoundColumn DataField="modalidad"
HeaderText="Modalidad" SortExpression="Modalidad">

donde ya estableci la propiedad AllowSorting = true;

Ahora en el servidor tengo lo siguiente:

private void grid_SortCommand(object source,
System.Web.UI.WebControls.DataGridSortCommandEventArgs e)
{
tabla2 = (DataTable)Odatagrid.Consultar ();
DataView dv = new DataView (tabla2);
dv.Sort = e.SortExpression;
grid.DataSource = dv;
grid.DataBind();
}

ok cuando le doy click en la Modalidad se ordena por
orden alfabetico mi columna pero al utilizar la
paginacion la ordenacion se pierde.

que mas tengo que hacer para que esto funcione?
les agradeceria mucho si me orientaran un poco.

grisss
saludos!
Respuesta Responder a este mensaje
#2 grissss
10/12/2004 - 16:58 | Informe spam
ok si estas en lo cierto , vuelvo a llenar una tabla con
el siguiente codigo.

private void gridPrepropuesta_PageIndexChanged(object
source,
System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
{
tabla2 = (DataTable)Odatagrid.Consultar ();
gridPrepropuesta.CurrentPageIndex = e.NewPageIndex ;
gridPrepropuesta.DataSource = dv;
gridPrepropuesta.DataBind();
}

ok ahora hago lo siguiente:

private void gridPrepropuesta_PageIndexChanged(object
source,
System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
{
tabla2 = (DataTable)Odatagrid.Consultar ();
DataView dv = new DataView (tabla2);
dv.Sort = e.NewPageIndex.ToString () ;
grid.CurrentPageIndex = e.NewPageIndex ;
grid.DataSource = dv;
grid.DataBind();
}


pero no fuinciona que estoy haciendo mal!???
me marca un error de que no encuntra la columna 1.


cliente:
asp:BoundColumn DataField="modalidad"
HeaderText="Modalidad" SortExpression="Modalidad">

donde ya estableci la propiedad AllowSorting = true;

Ahora en el servidor tengo lo siguiente:

private void grid_SortCommand(object source,
System.Web.UI.WebControls.DataGridSortCommandEventArgs e)
{
tabla2 = (DataTable)Odatagrid.Consultar ();
DataView dv = new DataView (tabla2);
dv.Sort = e.SortExpression;
grid.DataSource = dv;
grid.DataBind();
}

grisss
saludos!
Respuesta Responder a este mensaje
#3 A.Poblacion
10/12/2004 - 17:22 | Informe spam
Lo que estás haciendo mal es que en el Sort del DataView le has puesto
e.NewPageIndex, que lo que trae es el número de la página y no el nombre de
la columna (por eso dice que no encuentra la columna "1").

El nombre de la columna lo tendrás que guardar en el evento SortCommand y
luego recuperarlo de donde lo hayas guardado en el PageIndexChanged para
pasárselo al Sort del DataView.

Recuerda que las clases de los WebForms no conservan estado, por lo que no
puedes usar una variable de la clase para guardar la columna de ordenación.
Puedes recurrir al ViewState, al Session, o a una Cookie para guardar ese
dato.


"grissss" wrote in message
news:04f101c4ded1$1e4165b0$
ok si estas en lo cierto , vuelvo a llenar una tabla con
el siguiente codigo.

private void gridPrepropuesta_PageIndexChanged(object
source,
System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
{
tabla2 = (DataTable)Odatagrid.Consultar ();
gridPrepropuesta.CurrentPageIndex = e.NewPageIndex ;
gridPrepropuesta.DataSource = dv;
gridPrepropuesta.DataBind();
}

ok ahora hago lo siguiente:

private void gridPrepropuesta_PageIndexChanged(object
source,
System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
{
tabla2 = (DataTable)Odatagrid.Consultar ();
DataView dv = new DataView (tabla2);
dv.Sort = e.NewPageIndex.ToString () ;
grid.CurrentPageIndex = e.NewPageIndex ;
grid.DataSource = dv;
grid.DataBind();
}


pero no fuinciona que estoy haciendo mal!???
me marca un error de que no encuntra la columna 1.


cliente:
asp:BoundColumn DataField="modalidad"
HeaderText="Modalidad" SortExpression="Modalidad">

donde ya estableci la propiedad AllowSorting = true;

Ahora en el servidor tengo lo siguiente:

private void grid_SortCommand(object source,
System.Web.UI.WebControls.DataGridSortCommandEventArgs e)
{
tabla2 = (DataTable)Odatagrid.Consultar ();
DataView dv = new DataView (tabla2);
dv.Sort = e.SortExpression;
grid.DataSource = dv;
grid.DataBind();
}

grisss
saludos!




Respuesta Responder a este mensaje
#4 grisss
10/12/2004 - 18:22 | Informe spam
ok tienes razon ya lo hice y funciono ahora hare lo mismo
para las otras columnas.
gracias!

Lo que estás haciendo mal es que en el Sort del DataView


le has puesto
e.NewPageIndex, que lo que trae es el número de la


página y no el nombre de
la columna (por eso dice que no encuentra la


columna "1").

El nombre de la columna lo tendrás que guardar en el


evento SortCommand y
luego recuperarlo de donde lo hayas guardado en el


PageIndexChanged para
pasárselo al Sort del DataView.

Recuerda que las clases de los WebForms no conservan


estado, por lo que no
puedes usar una variable de la clase para guardar la


columna de ordenación.
Puedes recurrir al ViewState, al Session, o a una Cookie


para guardar ese
dato.


"grissss" wrote in


message
news:04f101c4ded1$1e4165b0$
ok si estas en lo cierto , vuelvo a llenar una tabla




con
el siguiente codigo.

private void gridPrepropuesta_PageIndexChanged(object
source,
System.Web.UI.WebControls.DataGridPageChangedEventArgs




e)
{
tabla2 = (DataTable)Odatagrid.Consultar ();
gridPrepropuesta.CurrentPageIndex = e.NewPageIndex ;
gridPrepropuesta.DataSource = dv;
gridPrepropuesta.DataBind();
}

ok ahora hago lo siguiente:

private void gridPrepropuesta_PageIndexChanged(object
source,
System.Web.UI.WebControls.DataGridPageChangedEventArgs




e)
{
tabla2 = (DataTable)Odatagrid.Consultar ();
DataView dv = new DataView (tabla2);
dv.Sort = e.NewPageIndex.ToString () ;
grid.CurrentPageIndex = e.NewPageIndex ;
grid.DataSource = dv;
grid.DataBind();
}


pero no fuinciona que estoy haciendo mal!???
me marca un error de que no encuntra la columna 1.


cliente:
asp:BoundColumn DataField="modalidad"
HeaderText="Modalidad" SortExpression="Modalidad">

donde ya estableci la propiedad AllowSorting = true;

Ahora en el servidor tengo lo siguiente:

private void grid_SortCommand(object source,
System.Web.UI.WebControls.DataGridSortCommandEventArgs




e)
{
tabla2 = (DataTable)Odatagrid.Consultar ();
DataView dv = new DataView (tabla2);
dv.Sort = e.SortExpression;
grid.DataSource = dv;
grid.DataBind();
}

grisss
saludos!








.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida