LabelFunction

Para todas as tabelas que eu crio, em geral elas se tornam componentes
separados para que eu possa reutilizar em várias outras telas do programa. 
Algo
interessante que você pode fazer com os Datagrid é utilizar a opção 
LabelFunction, que
permite "personalizar" o label, ou seja, visualizar as
informações de um "Objecto dentro de outro Objeto".

LabelFunction, também é essencial quando se trata de um ComboBox, pesquise
no Help para maiores informações, aonde você pode formatadar tudo o que vai 
mostrar para o usuário. Veja um código de exemplo do DataGrid  aonde eu
acesso um objeto dentro de outro objeto e ainda formato os campos, meu
método "labelFunction" se chama labelColunas. Se você prestar atenção eu
ainda coloco com cores diferentes as linhas que eu quero, verificando o tipo
do Cliente.

<?xml version="1.0" encoding="utf-8"?>
<mx:DataGrid xmlns:mx="http://www.adobe.com/2006/mxml";>
 <mx:Script>
  <![CDATA[
   import br.com.agroquima.negocio.geral.Cliente;
   import br.com.agroquima.negocio.geral.PessoaJuridica;
   import br.com.agroquima.negocio.geral.PessoaFisica;

   private function labelColunas(item:Object, column:DataGridColumn):String
{
       var label:String = "";

       try {
        var cliente:Cliente = item as Cliente;
     switch ( column ) {
      case colCpfCnpj :
       if ( cliente is PessoaFisica ) {
        var pessoaFisica:PessoaFisica = PessoaFisica(cliente);
        label = pessoaFisica.cpf;
       }

       if ( cliente is PessoaJuridica ) {
        var pessoaJuridica:PessoaJuridica = PessoaJuridica(cliente);
        label = pessoaJuridica.cnpj;
       }

       break;
     }
       } catch (e:Error) {
        trace(e.message);
       }

       return label;
      }

      override protected function drawRowBackground(s:Sprite, rowIndex:int,
y:Number, height:Number, color:uint, dataIndex:int):void {
    if ( this.dataProvider != null && dataIndex < this.dataProvider.length )
    {
     var cliente:Cliente = this.dataProvider[dataIndex] as Cliente;
     switch ( cliente.tipo ) {
       case Cliente.TIPO_PESSOA_FISICA :
        color = 0xffffff;
        break;
       case Cliente.TIPO_PESSOA_JURIDICA :
        color = 0x69bfde;
        break;
       case Cliente.TIPO_PESSOA_COOPERATIVA :
        color = 0xb9b09d;
        break;
       case Cliente.TIPO_PESSOA_ORGAO_PUBLICO :
        color = 0x595441;
        break;
       case Cliente.TIPO_PESSOA_REVENDA :
        color = 0x4a8797;
        break;

     }

     //40662D,819639,B3E7FF,FFFAF0,E07800
     //FFCB96,7F654B,FFF1E2,7F7871,CCA278
//
    }

    super.drawRowBackground(s, rowIndex, y, height, color, dataIndex);
   }

  ]]>
 </mx:Script>
 <!--
  [Cliente]
  public var codigo:Number;
  public var nome:String;
  public var endereco:String;
  public var telefone:ArrayCollection;
  public var cep:String;
  public var tipo:String;
  public var fazenda:ArrayCollection;
  public var patrimonio:ArrayCollection;
  public var empresa:Empresa;
  public var campanha:ArrayCollection;
  public var referencia:ArrayCollection;
  public var creditoCliente:CreditoCliente;
  public var cidade:Cidade;
  public var email:String;
  public var cadastroSimplificado:Boolean;
 -->
 <mx:columns>
         <mx:DataGridColumn id="colCodigo" headerText="Código"
dataField="codigo" width="80"/>
         <mx:DataGridColumn id="colNome" headerText="Nome"
dataField="nome"/>
         <mx:DataGridColumn id="colCpfCnpj" headerText="CPF/CNPJ"
labelFunction="labelColunas" width="120" sortable="false"/>
         <mx:DataGridColumn id="colTipo" headerText="Tipo" dataField="tipo"
width="40" textAlign="center"/>
 </mx:columns>
</mx:DataGrid>



Outro Exemplo mais Direto:

<?xml version="1.0" encoding="utf-8"?>
<mx:DataGrid xmlns:mx="http://www.adobe.com/2006/mxml";
 creationComplete="configApp()">
 <mx:Script>
  <![CDATA[
   import br.com.agroquima.util.FormatadorNumerico;
   import br.com.agroquima.negocio.geral.ItemPotencial;
   import mx.formatters.NumberFormatter;
   import br.com.agroquima.negocio.geral.Socio;

   private var formatadorNumerico:FormatadorNumerico = new 
FormatadorNumerico();

   private function labelColunas(item:Object, column:DataGridColumn):String 
{
       var label:String = "";

       var itemPotencial:ItemPotencial = item as ItemPotencial;
       var tipo:String = "";

       switch ( column ) {
     case colCaracteristica :
      label = itemPotencial.caracteristica.descricao;
      break;
     case colParticipacao :
      label = formatadorNumerico.format(itemPotencial.valor);
      break;
     default :
      label = "";
    }

       return label;
      }
  ]]>
 </mx:Script>
 <!--
  [ItemPotencial]
  public var valor:Number;
  public var ano:Number;
  public var caracteristica:Caracteristica;
 -->
 <mx:columns>
    <mx:DataGridColumn id="colCaracteristica" headerText="Característica" 
labelFunction="labelColunas" sortable="false"/>
    <mx:DataGridColumn id="colAno" headerText="Ano" width="45" 
dataField="ano"/>
    <mx:DataGridColumn id="colValor" headerText="Valor [R$]" 
dataField="valor" labelFunction="labelColunas" width="120"/>
 </mx:columns>
</mx:DataGrid>

Percebeu que do objeto Caracterísitia que está dentro do objeto 
ItemPotencial eu mostro a descrição?

Grande Abraço,
-Daniel Negri




----- Original Message ----- 
From: "Will" <[EMAIL PROTECTED]>
To: "flexdev" <[email protected]>
Sent: Friday, December 28, 2007 5:27 PM
Subject: [flexdev] Re: Preencher Grid com dados do .NET



Acho que entendi melhor o problema, mas ainda nao sei a solução.
O que parece estar acontecendo é que tem objetos dentro de um objeto.
Como se acessa objetos que estão dentro de um objeto?

Acho que é isso.



--~--~---------~--~----~------------~-------~--~----~
Você recebeu esta mensagem porque está inscrito na lista "flexdev"
Para enviar uma mensagem, envie um e-mail para [email protected]
Para sair da lista, envie um email em branco para [EMAIL PROTECTED]
Mais opções estão disponíveis em http://groups.google.com/group/flexdev
-~----------~----~----~----~------~----~------~--~---

Responder a