Comunidad de diseño web y desarrollo en internet online

Acceder a un DatagridColumn

Citar            
MensajeEscrito el 01 Abr 2009 04:28 pm
Hola me gustaria acceder a un datagrid que tengo a una celda , pero nose como se hace.

Código :

<mx:TabNavigator id="tn"  width="100%" height="100%"> 

             <mx:VBox label="Panel 1"> 
                 <mx:Canvas width="100%" height="100%">
                     <mx:Button label="Consultar" height="22" y="25" width="105" x="380" id="btn_album" click="serv.send()"/>
                     <mx:DataGrid height="142" width="465" x="25" y="79" id="dtg_album" dataProvider="{serv.lastResult.lfm.results.albummatches.album}">
                         <mx:columns>
                             <mx:DataGridColumn headerText="Carátula" dataField="image" labelFunction="laSegunda" itemRenderer="mx.controls.Image" />
                          ....


Pues bien quiero acceder a ese DataGridColumn para coger la imagen y ampliarla, pero el tema es que no se acceder. Muchas Gracias.

Por Pedroal020

15 de clabLevel



 

firefox
Citar            
MensajeEscrito el 01 Abr 2009 05:35 pm
Accédelo en el dataProvider, lo puedes acceder como ArrayCollection, luego getIteamAt(xxxx).image

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 02 Abr 2009 06:02 am
Hola, buenos dias, no entiendo muy bien a que te refieres

Por Pedroal020

15 de clabLevel



 

firefox
Citar            
MensajeEscrito el 02 Abr 2009 12:13 pm
El dataprovider es un listado que alimenta de info a un datagrid, y que usualmente es un Array o un ArrayCollection, en tu caso lo tienes así:

dataProvider="{serv.lastResult.lfm.results.albummatches.album}"

Esto parece ser el resultado de una llamada a un Webservice o RemoteObject. Si lo usas como ArayCollection:

var listado:ArrayCollection = serv.lastResult.lfm.results.albummatches.album as ArrayCollection
trace(listado.getItemAt(2).image)

Puedes modificarlo con cualquier método de ArrayCollection

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 03 Abr 2009 09:39 am
Hola he intentado hacer lo que me has dicho:

Código :

<mx:Script>
   <![CDATA[
      import mx.collections.ArrayCollection;
      import fl.data.DataProvider;
      var listado:ArrayCollection = serv.lastResult.lfm.results.albummatches.album as ArrayCollection;
      trace(listado.getItemAt(2).image);
      ]]>
</mx:Script>
...
<mx:DataGrid height="142" width="465" x="25" y="79" id="dtg_album" dataProvider="{serv.lastResult.lfm.results.albummatches.album}">
    <mx:columns>
       <mx:DataGridColumn headerText="Carátula" dataField="image" itemRenderer="mx.controls.Image"/>



Y me salen dos problemas:
El primero ( en la linea del trace) me dice que se accede a una propiedad no definida) supongo que será porque primera tengo que crear un dataprovider :

Código :

var:proveedor:DataProvider; 
proveedor=new DataProvider();
proveedor=serv.lastResult.lfm.results.albummatches.album;



Y el segundo problema es que para poner el dataprovider tengo que utilizar la libreria fl:

Código :

<mx:Script>
   <![CDATA[
      import fl.data.DataProvider;



Y no la puedo cargar no tengo la libreria fl.
Perdon de nuevo es que hace poco que he comenzado con flex y aun estoy verde...se nota no? jejej. Gracias por todo otra vez

Por Pedroal020

15 de clabLevel



 

firefox
Citar            
MensajeEscrito el 03 Abr 2009 12:46 pm
El dataProvider no lo necesitas, solo el arrayCollection. Pero estás poniendo esto ni bien se ejecuta tu MXML:

var listado:ArrayCollection = serv.lastResult.lfm.results.albummatches.album as ArrayCollection;

serv.lastResult apunta a que es el resultado de una llamada RPC. Puedes acceder a ella una vez que has recibido los datos, no antes. Al usar databinding, los datos se actualizan cuando se carga automáticamente, pero si quieres accederlos explícitamente, tienes que asegurarte que el servicio lo haya cargado. Again: ¿de donde vienen esos datos?

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 06 Abr 2009 04:40 am
Hola,accedo a un servicio RPC (last.fm) y saco datos de musica. Bien ya he podido sacar la url de la imagen, el problema es que ahora tengo que hacer que cuando pase por encima de cada imagen que hay en DatagridColum del DataGrid

Código :

 <mx:DataGrid  height="142" width="465" x="25" y="79" id="dtg_album" dataProvider="{serv.lastResult.lfm.results.albummatches.album}">
                         <mx:columns>
                             <mx:DataGridColumn headerText="Carátula" dataField="image" labelFunction="laSegunda" itemRenderer="mx.controls.Image"  />
                   


La imagen se amplie. He estado mirando y lo unico que he encontrado( ya que dentro del DataGridColumn no puedo hacer un mouseOver) es el evento rollover, pero este evento se aplica a todo el datagrid y yo quiero aplicarlo unicamente a cada imagen que se encuentra en ese DataGridColumn. Nose estoy un poco liado...

Por Pedroal020

15 de clabLevel



 

firefox
Citar            
MensajeEscrito el 06 Abr 2009 12:36 pm
En vez de usar un componente Image como renderer, haz el tuyo propio. Creas un componente de Flex (basado en Canvas por ejemplo), o incluso Image solamente si quieres, luego le metes la lógica dentro ... la info viene como data.image, es decir le metes programación dentro y si quieres acceder a la info que esta mostrando, lo haces por data.image

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 06 Abr 2009 03:53 pm
A ver hasta donde puedo llegar:
1.- Creo un componente de lo que quiero hacer( agrandar la imagen ):

Código :

<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml">
   <mx:Script>
      <![CDATA[
         function ampliar(){
            imatge.height=imatge.height*2;
            imatge.width=imatge.width*2;
         }
         function reduce(){
            imatge.height=imatge.height/2;
            imatge.width=imatge.width/2;
         }
         
      ]]>
   </mx:Script>
   <mx:Image id="imatge" mouseOver="ampliar()" [color=#CC0000]source="???"[/color] mouseOut="reduce()">
      
   </mx:Image>
</mx:Canvas>


aqui viene mi primer problema, el source se lo tendria que pasar desde la aplicación que llama a la componente porque la url la obtengo con la llamada a la RPC( o hago otra llamada dentro del componente imagen para obtener la url?).

2.- Llamo al componente...pero como? . Tu dices esto?:

Código :

<mx:DataGrid height="142" width="465" x="25" y="79" id="dtg_artist" dataProvider="{serv2.lastResult.lfm.topalbums.album}">
                         <mx:columns>
                             <mx:DataGridColumn headerText="Carátula" dataField="image" labelFunction="laSegunda" [color=red]itemRenderer="mios.imagen.data.image"[/color] />
                      


Gracias por todo

Por Pedroal020

15 de clabLevel



 

firefox
Citar            
MensajeEscrito el 06 Abr 2009 04:02 pm
Yep, el itemRenderer apunta a tu componente

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 Abr 2009 08:25 am
ok ya he solucionado el tema de ampliar una imagen creando un componente, ahora tengo el problema que desde la aplicación principal tengo que pasarle la url de la imagen a ampliar y no se como se le puede pasar...si se pudiera sería algo así:

Código :

<mx:DataGridColumn headerText="Carátula" dataField="image" labelFunction="laSegunda" itemRenderer="componentes.imagen(URL)"  />


pero eso creo que no se puede hacer.

Despues tambien tengo el problema de que al ampliar la imagen no se me ve en el DataGrid porque la fila es muy pequeña, ¿ como puedo hacer mas ancha la fila? Muchas Gracias

Por Pedroal020

15 de clabLevel



 

firefox
Citar            
MensajeEscrito el 07 Abr 2009 10:23 am
La imagen la tienes a través de data.imagen.
Obviamente el componente no puede trascender el tamaño de la celda, tendrás que buscar un mecanismo distinto, por ejemplo abrir un pop-up con la imagen en grande

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 Abr 2009 10:43 am
Vale ok pro la url como se la paso?

Por Pedroal020

15 de clabLevel



 

firefox
Citar            
MensajeEscrito el 07 Abr 2009 11:19 am
Dado que es un itemRenderer, recibe automáticamente el dato que está mostrando en la propiedad data.
En este caso, tu itemrenderer está mostrando el campo imagen
Ergo, desde dentro de tu componente lo accedes como this.data.imagen

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 09 Abr 2009 09:37 am
A ver si lo he entendido bien:

Yo tengo esto:

Código :

  <mx:DataGridColumn headerText="Carátula" dataField="image" labelFunction="laSegunda" itemRenderer="componentes.imagen"  />


En donde tengo mi componente imagen

Dentro del componente si hago esto:

Código :

<mx:Image id="img" source="{this.data.imagen}" scaleX=".5" scaleY=".5" rollOver="doZoom(event)" rollOut="doZoom(event)"/> 


Me dice que this.data es nulo no contiene nada. Creo que se me está escapando algo, porque ahí tendría que cargar la url y no la carga

Por Pedroal020

15 de clabLevel



 

firefox
Citar            
MensajeEscrito el 13 Abr 2009 11:23 am
Si en datagridColumn dice:

dataField="image"

El source debería decir:

source="{this.data.image}"

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 15 Abr 2009 08:44 am
Ok gracias ya he podido sacar la URL, ahora el tema de ampliar( perdona es que no he trabajado nunca con lenguajes de programación , digamos de componentes) nose como hacer aparecer la imagen , crearla si , sería algo así:

Código :

       <![CDATA[
           import mx.collections.ArrayCollection;
           import mx.controls.Image;
           function ver():void
         {
            var v:ArrayCollection=new ArrayCollection();
            var img:Image=new Image();
            img.source=this.data.image.getItemAt(1).toString();
         }        
        ]]>    
     </mx:Script>
      <mx:Image id="img" source="{this.data.image.getItemAt(1).toString()}" mouseOver="ver()" />
      


El problema es que no se como sacarla en pantalla, osea , de esta manera creo un componente imagen con la url , pero nose como puedo mostrarla para que se vea, no se si me explico.

Por Pedroal020

15 de clabLevel



 

firefox
Citar            
MensajeEscrito el 15 Abr 2009 10:30 am
Usa un componente TitleWindow, lo abres via PopupManager y muestras allí la imagen en grande

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 15 Abr 2009 03:02 pm
Ok, gracias por todo Solisarg eres un megaCrack del Flex, por cierto, si que dominas lenguajes no? tambien vi por ahí en un foro que contestabas preguntas sobre OpenLaszlo , un saludo. Pedro

Por Pedroal020

15 de clabLevel



 

firefox

 

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