Comunidad de diseño web y desarrollo en internet online

Borrar elemento del DataGrid

Citar            
MensajeEscrito el 01 Ago 2010 02:48 pm
Hola, tengo un problema con un datagrid. A la hora de añadir y modificar algú registro de la base de datos, el datagrid si que me actualiza las filas al momento, pero cuando borro un registro, la actualización no se hace al momento, se hace en una acción posterior, es decir, cuando modifico, añado o elimino otro registro. Os pongo el código a ver si podeis decirme que es lo que estoy haciendo mal. Os lo agradecería muchisimo.

Código ActionScript :

private function reiniciaVariables():void {
   array_usuarios = new ArrayCollection;
   array_usuarios = U.devUsuarios();         
}
private function validaForma():void {         
   if(Label_Anadir.visible){
      U.addUsuario(nombre_txt.text, apellidos_txt.text, generoVal, leerVal, activoVal);      
   }
   else{               
      U.modUsuario(id_selected,nombre_txt.text, apellidos_txt.text, generoVal, leerVal, activoVal);
   }   
   reiniciaVariables();   
}
      
public function borrarUsuario(id:int):void{
   U.delUsuario(id);
   reiniciaVariables();
}
<mx:DataGrid y="10" width="600" height="187" horizontalCenter="14" id="usuarios_dg" dataProvider="{array_usuarios}">

Decir que uso una clase externa donde borro los registros, pero una vez borrados actualizo la base de datos y no hay manera.
Muchas gracias

Por piruja

15 de clabLevel



 

msie7
Citar            
MensajeEscrito el 01 Ago 2010 08:45 pm
Pues una vez me pasó algo así y no sé muy bien por qué es. Da la impresión de que el binding a veces no corre.
Al final opté por asignar el dataProvider a mano en la función que actualizaba todo.

Por leoncitoamx

Claber

206 de clabLevel

2 tutoriales

 

Puebla, México

firefox
Citar            
MensajeEscrito el 01 Ago 2010 09:32 pm
Sí, eso también lo he intentado pero tampoco me funciona. No se lo que puede pasar, porque como ya he dicho, la inserción y actualización si que me va bien.

Por piruja

15 de clabLevel



 

msie7
Citar            
MensajeEscrito el 03 Ago 2010 04:33 pm
Nadie puede darme alguna idea?, estoy desesperada y no encuentro una solución. No hay manera de actualizar tras el borrado.
Gracias

Por piruja

15 de clabLevel



 

msie7
Citar            
MensajeEscrito el 03 Ago 2010 04:51 pm
BuenAS:

La clase ArrayCollection distribuye el evento CollectionEvent.COLLECTION_CHANGE cuando cambian sus elementos. Añade un listener a array_usuarios y comprueba que cuando borras realmente se distribuye el evento y, por tanto, array_usuarios se actualiza realmente.

Una vez comprobado esto, puede que como estamos con procesos asíncronos tu dataGrid se haya renderizado antes de que realmente se haya producido el borrado del elemento en el dataProvider array_usuarios. Por tanto, en el anterior listener fuerza un nuevo renderizado del dataGrid.

Un saludo.

Por Lukánicos

Claber

468 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 03 Ago 2010 04:54 pm
Ok, voy a probar. Muchas gracias

Por piruja

15 de clabLevel



 

msie7
Citar            
MensajeEscrito el 03 Ago 2010 05:01 pm
He puesto este codigo para probar, pero no me lanza el mensaje, así que creo que no ejecuta el evento:

Código ActionScript :

//Dentro de una funcion
array_recorridos.addEventListener(CollectionEvent.COLLECTION_CHANGE, prueba);
private function prueba(event:Event):void{
   Alert.show("Si se ejecuta");
}

Por piruja

15 de clabLevel



 

msie7
Citar            
MensajeEscrito el 03 Ago 2010 05:07 pm
BuenAS:

U.delUsuario(id), ¿qué es? ¿Una clase estática que utilizas para borrar/actualizar el dataProvider (el ArrayCollection)?

Es que me despista bastante esto:

array_usuarios = U.devUsuarios();

Creo que la clave, -visto que el dataProvider no se actualiza-, es chequear el método que utilizas para añadir/eliminar elementos de dicho dataProvider.

Un saludo.

Por Lukánicos

Claber

468 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 03 Ago 2010 05:19 pm
Perdona por las molestias, ahora si que me ejecuta el mensaje, lo estaba asignando mal. El siguiente paso de renderizar de nuevo el datagrid como debo hacerlo?, Podrias indicarme por favor?

Por piruja

15 de clabLevel



 

msie7
Citar            
MensajeEscrito el 03 Ago 2010 07:08 pm
BuenAS:

Cuando quieras forzar el renderizado del dataGrid llama al método InvalidateDisplayList(). Por otro lado, para forzar el renderizado y actualizar los datos se puede emplear invalidateList(); ten cuidado con este último que es más seguro, pero si lo llamas dentro del listener del que hablamos antes NO ESTOY SEGURO (no lo he probado) si se puede producir una llamada recursiva y entrar en bucle.

Un saludo.

Por Lukánicos

Claber

468 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 04 Ago 2010 02:29 pm
No me funciona. El problema está en que primero llama a la funcion para cargar el dataProvider y después borra y no se porque hace eso.

Por piruja

15 de clabLevel



 

msie7
Citar            
MensajeEscrito el 24 Ago 2010 06:48 pm
He llegado a la conclusión de porque no actualiza el datagrid.
Resulta que cuando inicio el borrado, el sistema pregunta si realmente se quiere borrar o no a través de un cuadro de diálogo. Le diga que si o le diga que no, el datagrid se actualiza antes de la acción, por eso no me actualiza el datagrid.
Cuando hago un alta o una modificación no hay problemas porque no hago ninguna pregunta previa al usuario y por ello la actualización si funciona.
Alguien puede darme alguna idea de como poder solucionar esto?
Os lo agradecería enormemente

Por piruja

15 de clabLevel



 

msie7
Citar            
MensajeEscrito el 24 Ago 2010 08:42 pm
Hay dos maneras de resolver la cuestion :

Primer pasito:

Agregar al datagrid un itemrender, el cual ira junto a cada columna haciendo un click sobre itemrender, luego
tendras que la opcion de trabajor sobre el cliente y sobre ese arraycollection

me explico:

Si opcion borrado fue verdadera{
tomar el index de la columna del datagrid , de la columna a borrar
tomar el arraycollection y borrar directamente del arraycollection
y luego refrescar.
}

Esto es trabajar sobre el cliente.

o

Segundo Pasito :

Trabajar sobre el servidor , el cual le pasas un el id que corresponde a la base de datos, en este caso
como es el servidor los datos del cliente tendras que acutalizarlo, en este caso el array en eso momentos
tiene los datos de la ejecucion anterior y en este caso alli tienes que actualizar y remover
teniendo las siguientes opciones.

miDataGrida.dataProvider=nulll

y luego llamar a la lista actualizada desde el servidor hacia el cliente en este caso se supone que ya has cargado
y luego miDataGrid.dataProvider=mi array que viene desde la base de datos.


Tercera Pasito:

.....BUSCAR UN BUEN LIBRO Y VER OPCIONES.....


SUERTE

Por xcom

Claber

530 de clabLevel



 

firefox
Citar            
MensajeEscrito el 24 Ago 2010 10:52 pm
Muchas gracias, por fin he encontrado la solución. Gracias por vuestro tiempo.

Por piruja

15 de clabLevel



 

msie7

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.