Pesquisar este blog

segunda-feira, 29 de março de 2010

Campo numerico é ordenado como String no datagrid FLEX

Um outro problem que enfrentei, foi o seguinte:

tinha um campo numérico no banco e quando trazia estes dados para o DataGrid ele o ordenava como string, conforme abaixo:

1
11
12
2
22
3
33
333

Para resolver isso existe uma função no flex "sortCompareFunction", utilize a função abaixo:

private function numberSortFunction(obj1:Object, obj2:Object):int
{
        var n1: Number = Number(obj1["campo_que_deseja_ordenar"]) ;
        var n2: Number = Number(obj2["campo_que_deseja_ordenar"]) ;
        if( n1 < n2 ) {
             return -1;
       }
       else if( n1 > n2 )
      {
           return 1;
      }
          return 0;
}
 
 
Depois na coluna do grid que deseja ordenar, coloque, conforme abaixo:
 
<mx:DataGridColumn sortCompareFunction="numberSortFunction" width="450" headerText="Parent" dataField="campo_que_deseja_ordenar"/>

Pronto. Agora o sistema ordenará correto: 1,2,3.....

quinta-feira, 25 de março de 2010

Troca de informação entre componentes e Main no Flex - Utilizando TabNavigator

Uma das grandes dificuldades que tive, como iniciante em flex, foi passar um valor da tela principal (Main) para uma subtela (component) e vice-versa. No entanto vai ai a dica:

No meu caso eu tenho uma Main que contem um tabNavigator com vários components, conforme abaixo:



< Application xmlns:view="view.*" xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" >

<mx:TabNavigator id="nav">

<view:mes_corrente id="tab_mes_corrente" label="Mês Corrente" />

<view:acumulado id="tab_acumulado" label="Acumulado"/>

</mx:TabNavigator

</mx:Application>



Abaixo segue o componente, contido no TabNavigator.(Este componente está no caminho: src/view/mes_corrente.mxml)


<mx:Canvas name="mc">

<mx:Label id="lbl_titulo"/>

</mx:Canvas>


OK. Para passar um valor de dentro do Main para o componente "mes_corrente" o código fica assim:



<mx:Application creationComplete="ipassarValorParaComp()" xmlns:view="view.*"
        xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" >

   <mx:Script>

       <![CDATA[

              private function passarValorParaComp():void
             {
                           tab_mes_corrente.lbl_titulo.text="Eu recebi este valor do Main";
             }
       ]]>

    <mx:TabNavigator id="nav">
                 <view:mes_corrente id="tab_mes_corrente" label="Mês Corrente" />
                 <view:acumulado id="tab_acumulado" label="Acumulado"/>
    </mx:TabNavigator>

</mx:Application>

Pronto. Quando rodar o sistema o label do component "mes_corrente" receberá o valor passado pelo Main.

Para passar ou alterar um valor no Main, basta fazer o seguinte:

Vamos alterar o label de uma aba do tabNavigator que está no Main.

<mx:Canvas name="mc">
       <mx:Script>
               <![CDATA[
                      private function mudaAba():void
                     {
                            Application.application.tab_mes_corrente.label="O component mudou meu nome";
                      }
                ]]>

       <mx:Label id="lbl_titulo"/>
     <mx:Button click="mudaAba()"/>
</mx:Canvas>


Pronto!!!
Talvez isso pareça simples para os animais em Flex, más para quem está iniciando é de grande vália.

Gauge Free em Flex

Baixem o único Gauge Free para Flex, no endereço do Igor Musardo:

http://igormusardo.com.br/2008/09/25/adobe-flex-grafico-de-velocimetro-gauge/