Foros del Web » Programación para mayores de 30 ;) » .NET »

Mantener Sesion de un GridView Solucionado

Estas en el tema de Mantener Sesion de un GridView Solucionado en el foro de .NET en Foros del Web. Espero que esta pequeña ayuda les sirva, estaré trabajando para mejorarlo en cuanto encuentre una mejor solución la subo. Antes que nada explico mi problema: ...
  #1 (permalink)  
Antiguo 29/10/2013, 09:30
Avatar de alan_69niupi  
Fecha de Ingreso: junio-2011
Mensajes: 200
Antigüedad: 12 años, 10 meses
Puntos: 17
Busqueda Mantener Sesion de un GridView Solucionado

Espero que esta pequeña ayuda les sirva, estaré trabajando para mejorarlo en cuanto encuentre una mejor solución la subo.

Antes que nada explico mi problema:
Tengo un GridView que es llenado por una lista de objetos, y en la ultima columna debo mostrar un dato que puede ser modificable, y
para hacer eso necesito un texbox para que muestre el valor y me deje editarlo. Todo estaba bien hasta que cambiaba el pagina del grid
cuando regresaba perdia el valor que tenia mi text y al hacer el guardado no podia guardar todos lo valores que cambie. en las primes 2 columnas
tengo unos identificadores unicos. Ademas que a todas mis columnas le habilité el SortExpression para hacer el ordenado por cualquier columna.
El detalle es que al hacer cualquier postback, por ordenamiento o por cambio de pagina perdia todos los valores capturados
la solución es la siguiente:
El DataSource del grid lo lleno con una lista de objetos de una clase, esta clase contiene propiedades.
Al grid le creo una columna de tipo TempleteField, dentro de esta creo un ItemTemplate de tipo Textbox y en la propiedad Text pongo lo siguiente:

Text='<%# Eval("Nombre de la propiedad")>'
toda esta parte va en el lado del cliente
ahora en el lado del servidor creo un método

protected void RecuperarSesion()
{
Cliente cliente;
int AsignacionId;
int ClienteID;
foreach (GridViewRow row in grvClientes.Rows)
{
foreach (Clienre cli in ListadoClientes)
{
//la lista: ListadoClientes, es una lista que esta en una variable de sesion
//lblAsignacion es el nombre del control donde esta un identificador
Label lblID = row.Cells[0].FindControl("lblAsignacion") as Label;
//lblID es el identidicador del cliente, digo que el valor del lbl es mi identificador
ClienteID = Convert.ToInt32(lblID.Text);
//aqui pongo el valor del segundo identificador en mi variable AsignacionID
AsignaconId = Convert.ToInt32(row.Cells[1].Text);
cliente = new Cliente();
//en este método hago una busqueda, por los identificadores, esta busqueda me va regresar un objeto, es exactemente el mismo objeto
//que pertenece a este row
cliente = this.presentador.ConsultarClienteIndividual(asigna cionId, ClienteID);
TextBox txtValor = row.Cells[6].FindControl("txtValor") as TextBox;
//pregunto si el objeto de la busqueda en los identificadores son iguales objeto que corresponde en este foreach
//esta condicion solo me dará un resulado ya que el cliente.Id es unico para cada registro
if (cliente.Id == cli.Id && cliente.OrdenId == cli.OrdenId)
//aqui que le valor de la propiedad cli.valor es igual al valor del textbox,
//aclaro este cambio en la propiedad es a la lista que esta en el foreach
cli.Valor = Convert.ToDecimal(txtValor.Text);

}
}
}
Este método va a asignar el valor del textbox donde los identificadores de la lista sean iguales al los identificadores de cada Row del grid

ahora este método lo llamo desde el evento PageIndexChanging de mi grid
this.grvClientes.DataSource = this.ListadoClientes;
this.RestaurarSesionGrid();
this.grvClientes.PageIndex = e.NewPageIndex;
this.grvClientes.DataBind();

así de esta manera puedo mover libremente el grid en pagina y ordenamiento sin perder los datos. y los datos simplemente estan en la lista no estan guardados
aún en la base de datos, para guardarlos simplemente envio la lista y hago la insersion o actualizacion de uno en uno, ya no tengo que recorrer
nuevamente mi grid para saber cuales estan seleccionados o cambiados.



Saludos!!! y espero que les sea de gran ayuda

Etiquetas: control, gridview, solucionado
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 18:17.