Foros del Web » Creando para Internet » Flash y Actionscript »

Duda Sobre Datagrid En Adobe Flex 2

Estas en el tema de Duda Sobre Datagrid En Adobe Flex 2 en el foro de Flash y Actionscript en Foros del Web. Hola a todos espero me puedan ayudar, lo que quiere hacer es actualizar un datagrid desde otro mxml, el asunto esta asi: Tengo un mxml ...
  #1 (permalink)  
Antiguo 28/11/2007, 18:49
 
Fecha de Ingreso: noviembre-2007
Mensajes: 3
Antigüedad: 17 años
Puntos: 0
Duda Sobre Datagrid En Adobe Flex 2

Hola a todos espero me puedan ayudar, lo que quiere hacer es actualizar un datagrid desde otro mxml, el asunto esta asi:

Tengo un mxml el cual se llama catAlumno en el cual esta el Datagrid, este se llena con un RemoteObject que hace una consulta a una base de datos sql con ColdFusion.

Tengo otro mxml que se llama altaAlumno en el cual se registran alumnos, el problema que tengo es que cuando doy de alta un Alumno y voy al mxml catAlumno en el Datagrid no aparece el alumno, tengo que salir de la Aplicaion y volver a entrar para que me lo muestre.

Que puedo hacer para que actualice el Datagrid inmediatamente despues de dar de alta un alumno.

Ojala me pudieran dar una solucion

Gracias por su atención.
  #2 (permalink)  
Antiguo 29/11/2007, 08:01
Avatar de SinguerInc  
Fecha de Ingreso: octubre-2007
Ubicación: Barcelona, España
Mensajes: 551
Antigüedad: 17 años, 1 mes
Puntos: 5
Re: Duda Sobre Datagrid En Adobe Flex 2

yes, yo la se...
tienes que trabajar con "binding".
Pero con la descripcion que has dado no se exactamente como esta realizada tu aplicacion, a ver si entiendo, un mxml es la aplicacion y el otro mxml es un componente que se encuentra dentro de ella?
Es mucho mas facil de lo que crees...pero sin ver el codigo no te puedo ayudar demasiado.
  #3 (permalink)  
Antiguo 29/11/2007, 13:00
 
Fecha de Ingreso: noviembre-2007
Mensajes: 3
Antigüedad: 17 años
Puntos: 0
Re: Duda Sobre Datagrid En Adobe Flex 2

Hola SinguerInc, gracias por contestar a mi duda

Esta es el mxml donde esta el Datgrid y de aqui mando a llamar al mxml alta_alumno con la funcion showAlta().

alumno.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="840" height="524"
creationComplete="this.cfEscuela.verAlumno()">

<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.rpc.events.ResultEvent;
import mx.rpc.events.FaultEvent;
import mx.managers.PopUpManager;
import mx.containers.TitleWindow;
import mx.utils.ObjectUtil;
import mx.controls.Alert;
import flash.geom.Point;

private var point1:Point = new Point();

private function showAlta():void {
var login:alta_alumno = alta_alumno(PopUpManager.createPopUp(this, alta_alumno, true));
point1.x=id_alta.x;
point1.y=id_alta.y;
point1=id_alta.localToGlobal(point1);
login.x=point1.x-330;
login.y=point1.y-500;
login.x=point1.x-330;
}
public function llenarDG(event:ResultEvent):void{
this.dgAlumno.dataProvider = event.result as ArrayCollection;
}

private function falloAlgo(event:FaultEvent):void{
Alert.show(ObjectUtil.toString(event.fault));
}

]]>
</mx:Script>
<mx:RemoteObject id="cfEscuela" showBusyCursor="true" destination="ColdFusion" source="hola.funcionEscuela">
<mx:method name="verAlumno" result="llenarDG(event)" fault="falloAlgo(event)"/>
</mx:RemoteObject>

<mx:DataGrid id="dgAlumno" x="10" y="132" width="820" height="266">
<mx:columns>
<mx:DataGridColumn headerText="Matricula" dataField="matricula" width="70"/>
<mx:DataGridColumn headerText="Nombre" dataField="nombre_alumno"/>
<mx:DataGridColumn headerText="Apellido Paterno" dataField="apaterno_alumno" width="170"/>
<mx:DataGridColumn headerText="Apellido Materno" dataField="amaterno_alumno" width="170"/>
<mx:DataGridColumn headerText="Semestre" dataField="semestre" width="90"/>
</mx:columns>
</mx:DataGrid>
<mx:HBox x="10" y="419" width="820" height="27" horizontalAlign="center">
<mx:Button id="id_alta" label="Nuevo" width="100" click="showAlta()"/>
</mx:HBox>
</mx:Canvas>

Este es el mxml que aparece, desde aqui quiero que cuando se ingrese un nuevo alumno se actualice del Datagrid de alumno.mxml

alta_alumno.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="660" height="492"
title="Registro de Alumno">

<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.rpc.events.ResultEvent;
import mx.rpc.events.FaultEvent;
import mx.managers.PopUpManager;
import mx.utils.ObjectUtil;
import mx.controls.Alert;
import mx.controls.Text;
import catalogos.alumno;

private function salirAlta():void {
PopUpManager.removePopUp(this);
}

]]>
</mx:Script>

<mx:RemoteObject id="cfEscuela" showBusyCursor="true" destination="ColdFusion" source="hola.funcionEscuela">
<mx:method name="altaAlumno"/>
</mx:RemoteObject>

<mx:Label x="10" y="10" text="Datos del Alumno" fontWeight="bold" fontSize="12"/>
<mx:Label x="10" y="94" text="* Nombre:" fontWeight="bold"/>
<mx:Label x="230" y="94" text="* Apellido Paterno:" fontWeight="bold"/>
<mx:Label x="450" y="94" text="Apellido Materno:" fontWeight="bold"/>
<mx:Label x="10" y="38" text="* Matricula:" fontWeight="bold"/>
<mx:Label x="450" y="150" text="Semestre:" fontWeight="bold"/>
<mx:Label x="10" y="346" text="Telefono Casa:" fontWeight="bold"/>

<mx:TextInput id="idMatricula" x="10" y="64" width="180" restrict="A-Z,0-9"/>
<mx:TextInput id="idNombre" x="10" y="120" width="180" restrict="A-Z, "/>
<mx:TextInput id="idApaterno" x="230" y="120" width="180" restrict="A-Z,Ñ,ñ,^a-z, "/>
<mx:TextInput id="idAmaterno" x="450" y="120" width="180" restrict="A-Z, "/>
<mx:TextInput id="idSemestre" x="450" y="176" width="180" restrict="A-Z, "/>
<mx:TextInput id="telCasa" x="10" y="372" width="180" restrict="0-9"/>

<mx:HBox x="165.5" y="414" width="309" height="28" horizontalAlign="center">
<mx:Button id="id_alta" label="Guardar" width="100"
click="cfEscuela.altaAlumno(idMatricula.text, idNombre.text, idApaterno.text, idAmaterno.text, idSemestre.text, telCasa.text)"/>
<mx:Button label="Cancelar" width="100" click="salirAlta()"/>
</mx:HBox>

</mx:TitleWindow>


Gracias por tu ayuda.
  #4 (permalink)  
Antiguo 29/11/2007, 15:20
Avatar de SinguerInc  
Fecha de Ingreso: octubre-2007
Ubicación: Barcelona, España
Mensajes: 551
Antigüedad: 17 años, 1 mes
Puntos: 5
Re: Duda Sobre Datagrid En Adobe Flex 2

Si, ok, ya entendi que quieres hacer, a ver, es un tema bastante complejo, paso a explicarte:

ATENCION: Cada vez que he escrito Bindable se escribe entre corchetes....intentente varias veces pero lo muestra mal entre los tag "CODE"

Tiene varias soluciones posibles:

1. (la que haria yo, la mas flexible pero la mas complicada)
Tienes que crear un evento, una subclasse que extiende la classe Event, y esta classe tendra un objeto dentro que guardara la informacion sobre el nuevo alumno, una vez creado el alumno, el componente (la ventana form), emitira un evento (dispatchEvent) de esta subClasse, que vendra registrado por un listener que se encuentra en la aplicacion donde tienes tu datagrid.
Hacer esto es algo complicado, si quieres te puedo hacer un ejemplo en un file nuevo para que veas como funciona ya que no tengo tus datos (RemoteObject)

2. la otra, mas facil (digamos mas facil...) es declarar una variable con "binding", o sea:

Bindable
public var alumnos:ArrayCollection = new ArrayCollection();

entonces en tu RemoteObject como "result" llamaras la siguiente funcion:

private function llenarDgAlumnos(result:ResultEvent):void
{
alumnos = ArrayCollection(Array(event.result));
}


y despues tendras en tu DataGrid lo siguiente


<mx:DataGrid id="dgAlumno" dataProvider="{alumnos}" x="10" y="132" width="820" height="266">
<mx:columns>....
....


de este modo, el datagrid registra cada cambio que recibe la variable alumno y actualiza la lista.

ok, hasta ahi el tema de la actualizacion esta resuelto!.

ahora la segunda parte...

en tu componente (dentro de el), donde tienes el form para ingresar los datos...tienes que declarar una variable "publica"


Bindable
public var alumnosEnForm:ArrayCollection;


y en tu aplicacion tendras el siguiente script:


login.alumnosEnForm = alumnos;


esto quiere decir que podras escribir directamente desde la ventana en una variable que se encuentra en la aplicacion.
Y aca el otro tema...que es lo que no entendi como haces (y por eso tienes que cargar de nuevo el flash para ver los cambios)

Cuando tu creas un nuevo alumno estaras tambien creando un objeto o classe para guardar los datos y mandarlos a la base de datos, este mismo objeto lo debes escribir en el ArrayCollection....pero ojo!, deben tener el mismo formato, o sea, como resultado en la ventana haras algo asi, creas un nuevo alumno y lo metes en el ArrayCollection


var obj:Object = new Object();
obj.matricula = "xxxxx";
obj.nombre_alumno = "Pippo";
obj.apaterno_alumno = "Apellido1";
obj.amaterno_alumno = "Apellido2";
obj.semestre = 2;

alumnosEnForm.addItem(obj);


y listo, ahi se actualizara. recuerda que tambien en el script debes salvar en el database.

Este script obviamente que esta incompleto y es una guia para que entiendas mas o menos que es lo que tienes que hacer, espero que te sirva para tener una idea y desarrollarla a fondo.

Saludos.

Última edición por SinguerInc; 29/11/2007 a las 15:42
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 00:10.