mantener el valor de un array []

09/06/2005 - 12:20 por JuanilloFox | Informe spam
Hola grupo,

Tengo un formulario Web, donde en uno de sus métodos, creo una matriz de
tipo int unidades[,].
El tema es que necesito que la matriz sea perdurable para otros métodos. El
problema es que tengo campos que realizan AutoPostBack es decir que si la
declaro en la clase vuelve a tomar valores iniciales.
¿Cómo podría solucionar el tema?


Un saludo

juanillofox@andujar.com

Preguntas similare

Leer las respuestas

#1 A.Poblacion
09/06/2005 - 13:46 | Informe spam
"JuanilloFox" wrote in message
news:
Hola grupo,

Tengo un formulario Web, donde en uno de sus métodos, creo una matriz de
tipo int unidades[,].
El tema es que necesito que la matriz sea perdurable para otros métodos.


El
problema es que tengo campos que realizan AutoPostBack es decir que si la
declaro en la clase vuelve a tomar valores iniciales.
¿Cómo podría solucionar el tema?



Guarda la matriz en el ViewState:

En el método que la rellena, una vez creada, haces:
ViewState["MiArray"] = unidades;

En el método que necesita sus valores (o en el Page_Load), lo recuperas
asi:
unidades = (int[,])ViewState["MiArray"];
Respuesta Responder a este mensaje
#2 JuanilloFox
10/06/2005 - 09:45 | Informe spam
Hola A.Poblacion,

Gracias por contestar..

He probado tu formula pero me da un error diciendo:
La matriz no es de tipo unidimensional.

¿Cómo debo tratarlo?


Un saludo


Respuesta Responder a este mensaje
#3 A.Poblacion
10/06/2005 - 14:13 | Informe spam
"JuanilloFox" wrote in message
news:
He probado tu formula pero me da un error diciendo:
La matriz no es de tipo unidimensional.

¿Cómo debo tratarlo?



Pues la verdad es que nunca lo había intentado con un array de dos
dimensiones, pero en teoría debería funcionar. Lo que hace el ViewState
cuando le asignas el array es serializarlo, y luego deserializarlo cuando
extraes el valor. Y en teoría un array de dos dimensiones se debería poder
serializar sin problemas.
¿Dónde te da el error? ¿Es en la linea que dice 'unidades (int[,])ViewState["MiArray"];'? ¿No se te habrá olvidado la coma entre los
corchetes del cast?
Respuesta Responder a este mensaje
#4 JuanilloFox
13/06/2005 - 07:32 | Informe spam
Hola A.Poblacion,

El error lo da cuando la página sale del método y vuelve a cargar la página
(Postback) que es cuando realiza la funcionalidad del ViewState.
El error es de tipo... La matriz no es de tipo unidimensional.
Respuesta Responder a este mensaje
#5 A.Poblacion
13/06/2005 - 10:30 | Informe spam
"JuanilloFox" wrote in message
news:
Hola A.Poblacion,

El error lo da cuando la página sale del método y vuelve a cargar la


página
(Postback) que es cuando realiza la funcionalidad del ViewState.
El error es de tipo... La matriz no es de tipo unidimensional.



Lo acabo de probar y, efectivamente, da un error al serializar el valor en
la función interna System.Web.UI.LosFormatter.SerializeValue(). Parece ser
que la implementación de la serialización que ha hecho Microsoft dentro del
LosFormatter no contempla la posibilidad de serializar arrays de dos
dimensiones.
Lo único que se me ocurre, si sigues queriendo usar el ViewState, es que el
array lo formatees por tu cuenta, por ejemplo, usando un BinaryFormatter
para meter el int[,] dentro de un byte[], y pasarle este byte[] al
ViewState.

Otra alternativa es usar el Session en lugar del ViewState. Este sí que te
admite guardar el array bidimensional. Ejemplo:

private int[,] prueba;
private void Page_Load(object sender, System.EventArgs e)
{
if (!Page.IsPostBack)
{
prueba = new int[,]{{1,2}, {3,4}};
Session["Prueba"] = prueba;
}
else
{
prueba = (int[,])Session["Prueba"];
Label1.Text = prueba[1,1].ToString();
}
}
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida