Comunidad de diseño web y desarrollo en internet online

Flex DataGrid selectedIndex y selectedEntry en textArea

Citar            
MensajeEscrito el 07 Oct 2008 01:34 pm
Hola, estoy trabajando Con Flex y AIR, la pregunta es muy sencilla, pero no encontre una respuesta a ella. Tengo un DataGrid que visualiza los datos de un xml (el atributo "titulo"), a su vez cuando se hace click en cada elemento de este se muestra en un textArea un atributo "texto". Lo que quiero es que al arrancar la aplicación el DataGrid no solo se posicione en el 1er registro (eso sí lo pude lograr) sino que ademas me muestre en el campo de texto el atributo "texto"

//El xml

Código :

<xml>   
      <not>
         <titulo>n1tit</titulo>
         <texto>n1txt</texto>
      </not>
      <not>      
         <titulo>n2tit</titulo>
         <texto>n2txt</texto>
      </not>
      <not>
         <titulo>n3tit</titulo>
         <texto>n3txt</texto>
      </not>
</xml>


//El mxml

Código :

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="dgXMLrqst.send()">
<mx:HTTPService id="dgXMLrqst" url="xml/xml.xml" useProxy="false"/>

<mx:Script>   
        <![CDATA[
[Bindable]
public var selectedEntry;
//selectedEntry=event.target.selectedItem
//selectedEntry=event.currentTarget.selectedIndex;
        ]]>
</mx:Script>
 
<mx:DataGrid x="20" y="20" id="dg" width="231" height="167" dataProvider="{dgXMLrqst.lastResult.xml.not}" change="selectedEntry=event.target.selectedItem" selectedIndex="1">
 <mx:columns>
  <mx:DataGridColumn headerText="col1" dataField="titulo"/>
  <mx:DataGridColumn headerText="col2" dataField="texto"/>
 </mx:columns>
</mx:DataGrid>
<mx:TextArea x="259" y="41" width="199" height="88" text="{selectedEntry.texto}" htmlText="true" wordWrap="true" editable="false"/>   
</mx:WindowedApplication>


Si prueban el código van a ver que el selector se posiciona en el 2do registro, hasta ahi bien, si clickean cualquiera de los registros se mostrará en el cuadro de texto el atributo "texto". Pero yo quiero tambien que cuando arranca la aplicación muestre en el cuadro de texto el atributo "texto" segun el valor del selectedIndex que se coloque. Como se hace?, gracias.

Por COOKERNATOR

43 de clabLevel



Genero:Masculino  

msie7
Citar            
MensajeEscrito el 08 Oct 2008 12:17 am
probaste asignando un id al DataGrid y usando el selectedItem desde el TextArea?

Código :

<mx:DataGrid id="dg" x="20" y="20" id="dg" width="231" height="167" dataProvider="{dgXMLrqst.lastResult.xml.not}" selectedIndex="1">
 <mx:columns>
  <mx:DataGridColumn headerText="col1" dataField="titulo"/>
  <mx:DataGridColumn headerText="col2" dataField="texto"/>
 </mx:columns>
</mx:DataGrid>
<mx:TextArea x="259" y="41" width="199" height="88" text="{dg.selectedItem.texto}" htmlText="true" wordWrap="true" editable="false"/>

Por master_of_puppetz

Claber

2483 de clabLevel

7 tutoriales
3 articulos

Genero:Masculino   Premio_Secretos

WebDev (Flex + PHP + JS)

safari
Citar            
MensajeEscrito el 08 Oct 2008 09:45 pm
Mira, gracias por responder, disculpame pero la verdad es que no entendi lo que me quisiste decir. Estuve investigando un poco mas sobre el asunto, el problema que me surge es que no se como decirle al Flex "el camino" donde encontrar los datos del xml. Se como hacerlo con un evento de click o de change en la propiedad del DataGrid, pero para setear los valores antes de hacer un click a este se me complica. Les muestro el siguiente código, es el anterior pero perfeccionado:

//el mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()">
<mx:HTTPService id="dgXMLrqst" url="xml/xml.xml" showBusyCursor="true" useProxy="false" result="onResult(event)"/>

<mx:Script>
<![CDATA[

import mx.collections.ArrayCollection;
import mx.rpc.events.ResultEvent;

public function init(){
dgXMLrqst.send();
//var SE1 = selectedEntry=event.currentTarget.selectedIndex;
//var SE2 = selectedEntry=event.target.selectedItem;
}

[Bindable]
public var dgXMLrqstaC:ArrayCollection = new ArrayCollection;

private function onResult(e:ResultEvent){
dgXMLrqstaC = e.result.xml.not;
dg.selectedIndex = 0;
TA.text = "este es el valor de inicializacion de la variable";
//TA.text = dgXMLrqstaC.texto;
}

[Bindable]
var selectedEntry;

]]>
</mx:Script>

<mx:DataGrid x="20" y="20" id="dg" width="231" height="167" dataProvider="{dgXMLrqstaC}" change="selectedEntry=event.target.selectedItem.texto" selectedIndex="1">
<mx:columns>
<mx:DataGridColumn headerText="col1" dataField="titulo"/>
<mx:DataGridColumn headerText="col2" dataField="texto"/>
</mx:columns>
</mx:DataGrid>
<mx:Text x="259" y="23" text="aca aparece el atributo &quot;c1&quot;" width="199" height="22" color="#D34919"/>
<mx:TextArea id="TA" x="259" y="41" width="199" height="88" text="{selectedEntry}" htmlText="true" wordWrap="true" editable="false"/>
<mx:Button label="refrescar!" click="init()"/>
</mx:WindowedApplication>

Como pueden observar si prueban el código, pruebenlo, para eso lo puse, es el mismo ejemplo con un par de perfectas innovaciones. Se utlilizó la propiedad result del HTTPService con una función "onResult" solo para darle mas robustez a la aplicación, ahora no hara falta cerrar y volver a abrir la aplicación para que se refresquen los cambios del xml y nos permitirá a nosotros realizar nuestras pruebitas. Pueden observar que al iniciar la aplicación el campo de texto "TA" muestra un valor que fue inicializado en la función "onResult", donde puse: TA.text = "este es el valor de inicializacion de la variable"; Ahora bien, si en lugar de poner un string cualquiera pongo lo siguiente: TA.text = dgXMLrqstaC.texto;, me da error, me dice acceso a una propiedad posiblemente no definida etc etc... Esa es la gran pregunta, cómo le defino a Flex el directorio donde debe buscar el valor del xml segun el index de datagrid que yo inicialize? Bueno espero que me puedan ayudar tanto como yo los ayude a ustedes :-)

Por COOKERNATOR

43 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 08 Oct 2008 09:46 pm
soooryyyyyyy, me olvide de los tags de código! me pasó por apurado y por los nervios :shock:

Por COOKERNATOR

43 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 08 Oct 2008 11:40 pm
Master_of_Puppetz sos un fenomeno, tenias razon, despues de leer y leer lo que pusiste en tu respuesta, me di cuenta de que estabas en lo cierto pero no veia la solución. La clave para el exito de esta empresa es esa infima sentencia en la propiedad "text" que define lo que hay dentro del textArea.

Código :

<mx:TextArea id="TA" text="{dg.selectedItem.texto}"/>

Simplemente hay que llamar al DataGrid por su id, luego la propiedad "selectedItem", y luego el atributo del xml que se queira mostrar. Y listo. Muchas gracias.

Por COOKERNATOR

43 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 09 Oct 2008 12:23 am
;) bien! y disculpa por no hacer mas extensiva mi explicacion :P

Por master_of_puppetz

Claber

2483 de clabLevel

7 tutoriales
3 articulos

Genero:Masculino   Premio_Secretos

WebDev (Flex + PHP + JS)

safari
Citar            
MensajeEscrito el 09 Oct 2008 04:19 am
Al contrario gracias a vos, la explicación no pudo ser mas presisa, es que yo soy medio duro para agarrar.

Por COOKERNATOR

43 de clabLevel



Genero:Masculino  

firefox

 

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