Comunidad de diseño web y desarrollo en internet online

Editar un dataGrid después de buscar. Error 1009

Citar            
MensajeEscrito el 05 Oct 2010 04:03 pm
Hola,

NO tengo ninguna experiencia en Flex y estoy luchando para hacer un formulario.

Tengo un código que llena un dataGrid con un resultado de un php

Puedo editar el contenido del dataGrid sin problemas y subir los resultados a la base de datos.

El problema siempre lo tengo cuando busco algo dentro del datagrid, nuevamente con un textinput y el php, relleno el datagrid con un nuevo contenido, pero ya no puedo referenciarme a el, siempre me sale el mismo error, de que estoy apuntando a algo que no existe (1009).

La linia que me rompe es:

agentes[event.dataField]=(agentesDg.itemEditorInstance as mx.controls.TextInput).text;

En principio, creo que esta linea le dice al objeto agentes (datagrid) la line que quiero editar, ya que luego lanzo la función.
pinguService.updateAgentes(agentes);


Les pido un poco de ayuda o algún hilo para aprender lo más básico.

Muchas Gracias.

Adjunto el código.

Código Flex :

<?xml version="1.0" encoding="utf-8"?>

<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
            xmlns:s="library://ns.adobe.com/flex/spark" 
            xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" xmlns:pinguservice="services.pinguservice.*" currentState="pingu" xmlns:valueObjects="valueObjects.*">

   <fx:Script>
      <![CDATA[
         import mx.collections.ArrayCollection;
         import mx.controls.Alert;
         import mx.controls.dataGridClasses.MXDataGridItemRenderer;
         import mx.events.DataGridEvent;
         import mx.events.FlexEvent;
         import mx.events.ListEvent;
         import mx.rpc.events.ResultEvent;
         
         protected function agentesDg_creationCompleteHandler(event:FlexEvent):void
         {
            getAgentesResult.token = pinguService.getAgentes();
         }
         

         protected function editarBtn_clickHandler(event:MouseEvent):void
         {
            currentState="pingu_upd";
         }

         
         protected function button_clickHandler(event:MouseEvent):void
         {
            agentes.nombre = nombreTextInput.text;
            agentes.pingu_1 = parseInt(pingu_1TextInput.text);
            agentes.pingu_2 = parseInt(pingu_2TextInput.text);
            agentes.pingu_3 = parseInt(pingu_3TextInput.text);
            agentes.pingu_4 = parseInt(pingu_4TextInput.text);
            agentes.pingu_5 = parseInt(pingu_5TextInput.text);
            agentes.pingu_6 = parseInt(pingu_6TextInput.text);
            agentes.pingu_7 = parseInt(pingu_7TextInput.text);
            if (agentes.id==0){
               createAgentesResult.token = pinguService.createAgentes(agentes);
            }
            else 
            {
               updateAgentesResult.token = pinguService.updateAgentes(agentes);
            }
         }
         

         protected function updateAgentesResult_resultHandler(event:ResultEvent):void
         {
            currentState="pingu";
         }


         protected function AddBtn_clickHandler(event:MouseEvent):void
         {
            currentState="pingu_add";
            agentes=new Agentes;
         }


         protected function createAgentesResult_resultHandler(event:ResultEvent):void
         {
            currentState="pingu";
            agentes.id=event.result as int;
            agentesDg.dataProvider.addItem(agentes);
            agentesDg.selectedItem=agentes;
            agentesDg.verticalScrollPosition=agentesDg.selectedIndex;
            agentesDg.validateNow();

         }

         protected function deleteAgentesResult_resultHandler(event:ResultEvent):void
         {
            agentesDg.dataProvider.removeItemAt(agentesDg.selectedIndex);
            currentState="pingu";

         }
         
         protected function DeleteBtn_clickHandler(event:MouseEvent):void
         {
            deleteAgentesResult.token = pinguService.deleteAgentes(agentes.id);
         }
         
         protected function pinguBtn_clickHandler(event:MouseEvent):void
         {
            currentState="pingu";
            getAgentesResult.token = pinguService.getAgentes();
         }


         protected function updateBtn_clickHandler(event:MouseEvent):void
         {   
            currentState="pingu";
            getAgentesResult.token = pinguService.getAgentes();
         }


         protected function agentesDg_changeHandler(event:ListEvent):void
         {
            currentState="pingu";
         }

   

         protected function agentesDg_itemEditEndHandler(event:DataGridEvent):void
         {
            agentes[event.dataField]=(agentesDg.itemEditorInstance as mx.controls.TextInput).text; 
            pinguService.updateAgentes(agentes);
            
         }


         protected function searchTxt_focusOutHandler(event:FocusEvent):void
         {
            if(searchTxt.text!=""){
               getAgentesResult.token = pinguService.getAgentesByName(searchTxt.text);
               
            }
            else{
               getAgentesResult.token = pinguService.getAgentesByName('Josep');
            }
         }

      ]]>
   </fx:Script>
   <s:states>
      <s:State name="pingu"/>
      <s:State name="pingu_upd"/>
      <s:State name="pingu_add"/>
   </s:states>
   <fx:Declarations>
      <s:CallResponder id="getAgentesResult" />
      <pinguservice:PinguService id="pinguService" fault="Alert.show(event.fault.faultString + '\n' + event.fault.faultDetail)" showBusyCursor="true"/>
      <valueObjects:Agentes id="agentes"/>
      <s:CallResponder id="updateAgentesResult" result="updateAgentesResult_resultHandler(event)"/>
      <s:CallResponder id="createAgentesResult" result="createAgentesResult_resultHandler(event)"/>
      <s:CallResponder id="deleteAgentesResult" result="deleteAgentesResult_resultHandler(event)"/>
      <!-- Place non-visual elements (e.g., services, value objects) here -->
   </fx:Declarations>
   <fx:Binding source="agentesDg.selectedItem as Agentes" destination="agentes"/>
   <s:Label text="Flex Ranking Project" fontSize="29" color="#D5D4D4" y="188" horizontalCenter="-5" includeIn="pingu"/>
   <mx:DataGrid y="277" id="agentesDg" change="agentesDg_changeHandler(event)" creationComplete="agentesDg_creationCompleteHandler(event)" dataProvider="{getAgentesResult.lastResult}" width="467" textAlign="center" verticalAlign="middle" horizontalCenter="0" height="152" change.pingu="agentesDg_changeHandler(event)"  editable="true"
              itemEditEnd="agentesDg_itemEditEndHandler(event)">
      <mx:columns>
         <mx:DataGridColumn headerText="agente" dataField="nombre"/>
         <mx:DataGridColumn headerText="P1" dataField="pingu_1"/>
         <mx:DataGridColumn headerText="P2" dataField="pingu_2"/>
         <mx:DataGridColumn headerText="P3" dataField="pingu_3"/>
         <mx:DataGridColumn headerText="P4" dataField="pingu_4"/>
         <mx:DataGridColumn headerText="P5" dataField="pingu_5"/>
         <mx:DataGridColumn headerText="P6" dataField="pingu_6"/>
         <mx:DataGridColumn headerText="P7" dataField="pingu_7"/>
      </mx:columns>
   </mx:DataGrid>
   <s:Button y="436" label="Editar" id="EditarBtn" horizontalCenter="0" click="editarBtn_clickHandler(event)" includeIn="pingu"/>
   <mx:Form includeIn="pingu_add,pingu_upd" y="548" horizontalCenter="64">
      <mx:FormItem label="P5">
         <s:TextInput id="pingu_5TextInput" text="{agentes.pingu_5}" width="56"/>
      </mx:FormItem>
      <mx:FormItem label="P6">
         <s:TextInput id="pingu_6TextInput" text="{agentes.pingu_6}" width="56"/>
      </mx:FormItem>
      <mx:FormItem label="P7">
         <s:TextInput id="pingu_7TextInput" text="{agentes.pingu_7}" width="56"/>
      </mx:FormItem>
   </mx:Form>
   <mx:Form includeIn="pingu_add,pingu_upd" y="506" horizontalCenter="2">
      <s:TextInput id="nombreTextInput" text="{agentes.nombre}" width="79" textAlign="center"/>
   </mx:Form>
   <s:Button id="GrabarBtn" label="Grabar" click="button_clickHandler(event)" y="665" horizontalCenter="90" includeIn="pingu_add,pingu_upd"/>
   <mx:Form includeIn="pingu_add,pingu_upd" defaultButton="{GrabarBtn}" y="548" horizontalCenter="-60">
      <mx:FormItem label="P1">
         <s:TextInput id="pingu_1TextInput" text="{agentes.pingu_1}" width="56"/>
      </mx:FormItem>
      <mx:FormItem label="P2">
         <s:TextInput id="pingu_2TextInput" text="{agentes.pingu_2}" width="56"/>
      </mx:FormItem>
      <mx:FormItem label="P3">
         <s:TextInput id="pingu_3TextInput" text="{agentes.pingu_3}" width="56"/>
      </mx:FormItem>
      <mx:FormItem label="P4">
         <s:TextInput id="pingu_4TextInput" text="{agentes.pingu_4}" width="56"/>
      </mx:FormItem>
   </mx:Form>
   <s:Button includeIn="pingu" y="248" label="Crear" id="AddBtn" click="AddBtn_clickHandler(event)" horizontalCenter="200"/>
   <s:Button y="437" label="Eliminar" id="DeleteBtn" enabled="false" horizontalCenter="200" enabled.pingu_upd="true" click="DeleteBtn_clickHandler(event)"/>
   <s:Label text="Flex Ranking Project" fontSize="29" color="#D5D4D4" y="188" horizontalCenter="-5" includeIn="pingu_upd"/>
   <s:Label text="Flex Ranking Project" fontSize="29" color="#D5D4D4" y="188" horizontalCenter="-5" includeIn="pingu_add"/>
   <s:Button y="436" label="Volver" id="pinguBtn" enabled.pingu="false" click.pingu_upd="pinguBtn_clickHandler(event)" click.pingu_add="pinguBtn_clickHandler(event)" horizontalCenter.pingu="-198" horizontalCenter.pingu_upd="-198" horizontalCenter.pingu_add="-198"/>
   <s:Button y="248" label="Actualizar" id="updateBtn" click.pingu="updateBtn_clickHandler(event)" click.pingu_upd="updateBtn_clickHandler(event)" click.pingu_add="updateBtn_clickHandler(event)" horizontalCenter.pingu_add="-197" horizontalCenter.pingu_upd="-197" horizontalCenter.pingu="-197" label.pingu="Actualizar"/>
   <s:TextInput x="522" y="247" id="searchTxt" text.pingu="agente..." focusOut.pingu="searchTxt_focusOutHandler(event)"/>
</s:Application>

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

msie8
Citar            
MensajeEscrito el 05 Oct 2010 05:40 pm
No trates de editar una celda de un datagrid directamente por código, manipula el dataProvider y reasigna

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 05 Oct 2010 11:52 pm
lo que te quiere decir es que a tu datagrid haces lo siguiente

var miarreglo=dg.dataprovider as arraycollection() , luego con el array ya puedes manipular la coleccion de datos que subyace
en el , si usas opp se hara mucho mas facil ya que se encapsulan los datos en objectos.
SI

Por xcom

Claber

530 de clabLevel



 

firefox
Citar            
MensajeEscrito el 06 Oct 2010 07:06 am
Gracias por la respuesta,

Realmente estoy mas lejos de saber flex de lo que pensaba.

Estoy siguiendo un tutorial de adobe que rellena un datagrid de datos y los edita, apoyado por unos servicios php.

Por ahora, me muevo con facilidad en el datagrid y disfruto de la opción editable=true y del evento asociado a esta edición: itemEditEnd="agentesDg_itemEditEndHandler(event)"

Esta función me funciona perfectamente al cargar el datagrid con su php select * from tabla...

Código Flex :

protected function agentesDg_itemEditEndHandler(event:DataGridEvent):void
{
agentes[event.dataField]=(agentesDg.itemEditorInstance as mx.controls.TextInput).text; 
pinguService.updateAgentes(agentes);
}


El drama me surge justo al volver a esta función después de cargar el datagrid con esta función: getAgentesResult.token = pinguService.getAgentesByName(searchTxt.text);

Insisto en la pregunta por que me interesa aprender la razón por la que, después de volver a rellenar el datagrid, la función que parecia entender el valor de la linea del datagrid que quiero editar, ahora ya no sabe a que línea me estoy refieriendo, tanto para editar como para mostrar los detalles. (agentes[event.dataField]=(agentesDg.itemEditorInstance as mx.controls.TextInput).text;)

Disculpen que insista, pero las respuestas que me han dado no las he coseguido entender.

Gracias

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

msie8
Citar            
MensajeEscrito el 06 Oct 2010 05:41 pm
Como no has entendido te recomiendo leer el primer tema y elegir cualquier libro en relacion a flex luego vuelve aqui
y trata de hacer los ejemplos ok

Por xcom

Claber

530 de clabLevel



 

firefox
Citar            
MensajeEscrito el 06 Oct 2010 06:12 pm
Lo cierto es que la forma que muestras es realmente peculiar, y debería seguir el ejemplo para entender como va, esto es, no es una forma estandard. Manipular el dataProvider es lo mas habitual.

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 07 Oct 2010 03:52 pm
Ok,

Gracias de todos modos.

Os dejo el link del tutorial, intenté aprender Flex4 después de bajarlo y como no, seguí un tutorial de la misma página de adobe.

Bueno, pues seguiré vuestros consejos.

http://www.adobe.com/devnet/flex/testdrive.html

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

msie8

 

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