Guardar un List<T> en el ViewState

En un proyecto actual tengo que mantener el contenido de un GridView sin pasar por la base de datos. Para ello configuré una propiedad que del tipo List<T>, es decir tipada, y la quise almacenar directamente en el ViewState, pero no funcionó.

Para solucionar el problema lo primero es que la clase o estructura que va almacenar el objeto List debe ser serializable por lo cual en este ejemplo tengo que ponerle el tag correspondiente a la estructura Centros.

    [Serializable]
public struct Centros
{
public int IdCentro { get; set; }
public string NombreCentro { get; set; }
}

A continuación debo de construir la propiedad para que trabaje con array, en vez de con objetos List. Para ello lo primero que hago es configurar el ser para que el valor que me viene en forma de lista, lo almacene en forma de Array. Y, además, el Get debe hacer una conversión desde el ViewState a un Array<T> y y desde ese Array<T> a un objeto de tipo List<T> que es lo que devuelvo. Recuerda que en este ejemplo <T> se debe sustituir por <Centros>

protected List<Centros> listadoCentros
{
get
{
Centros[] MatrizDeCentros = (Centros[])ViewState["listadoCentros"];
List<Centros> listado = new List<Centros>(MatrizDeCentros);
return listado;
}
set { ViewState["listadoCentrosAsociados"] = value.ToArray(); }
}

Pero para evitar errores aplico el patron no null y le añado el código de lo que tiene que hacer si la propiedad no ha sido inicializada.

protected List<Centros> listadoCentros
{
get
{
if (ViewState["listadoCentros"] == null)
{ return new List<Centros>(); }
else
{
Centros[] MatrizDeCentros = Centros[])ViewState["listadoCentros"];
List<Centros> listado = new List<Centros>(MatrizDeCentros);
return listado;
}
}
set { ViewState["listadoCentrosAsociados"] = value.ToArray(); }
}

Y ya ta. Espero que haya sido de utilidad.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *