Bom Dia Lino Sky,
Tem sim, pra falar a verdade é mais fácil você percorrer o ArrayCollection
que alimenta a tabela e logo depois, se você quiser que a soma apareça como
um último registro, você insere um objeto de Total com o valor do somatório.
Eu pessoalmente tenho trabalhado com o seguinte cenário, faço uma tabela e
logo abaixo eu coloco um label para o total. Tenha em mente que o
dataProvider da tabela fica como [Bindable], neste exemplo "listaProdutos".
<mx:Script>
<![CDATA[
import br.com.agroquima.util.FormatadorNumerico;
/**
* Informações da Página.
* @autor: Daniel Negri
* @sessao: 5 [Financeiro]
* @modulo: 5 [Contas a Pagar]
* @pagina: cadastroGrupoRelacaoPagamento
* @idPagina: 262
* [ campos ]
* codigo: 341
* nome: 342
* btnSalvar: 349
* btnFechar: 350
*/
[Bindable]
private var total:Number = 0;
[Bindable]
public var listaProdutos:ArrayCollection = new ArrayCollection();
private function calcularTotal():void {
var subTotal:int = 0;
total = 0;
for each ( var item:Produto in listaProdutos ) {
var valor:int = int(Math.round(produto.valor * 100));
var valorJuros:int = int(Math.round(produto.valorJuros*100));
subTotal += valor + valorJuros;
}
total = subTotal / 100;
}
}
]]>
</mx:Script>
<mx:DataGrid id="tabelaProdutos" dataProvider="{listaProdutos}>
<mx:columns>
<mx:DataGridColumn headerText="Produto" dataField="nome"/>
<mx:DataGridColumn headerText="Valor" dataField="valor"/>
<mx:DataGridColumn headerText="Juros" dataField="juros"/>
</mx:columns>
</mx:DataGrid>
<mx:Label id="labelTotal" text="Total: {calcularTotal()}"
width="100%"
textAlign="right"
fontWeight="bold"/>
Perceba que no "text" do label "labelTotal" eu chamo o método
"calcularTotal()" ao invés de colocar a variável "total". Assim, todas as
vezes que o ArrayCollection "listaProdutos" for modificado, o método é
chamado automaticamente, muito prático.
Outro ponto interessante, não sei se você já procurou, em outros tópicos eu
apresentei o problema do arredondamento de casas decimais, "O Flex não sabe
somar" e "Ponto Flutuante - BigDecimal". Cuidado com as operações básicas do
tipo soma, subtração e multiplicação de variáveis do tipo Number, são
realmente muito muito ruins, repito horríveis, péssimas, entre outras
lamúrias mais. Para contornar você acaba sendo obrigado a fazer essas
"manobras" de multiplicar por 100, passar pra inteiro, arredondar, voltar a
dividir por 100. Acredito que os programadores que fizeram essas novas
linguagens, JAVA, Phyton, PHP, Javascript, inclusive o ActionScript ...,
fugiram da aula básica de matemática, "Como somar dois números decimais,
vamos lá 1 + 1 é igual a?", realmente uma pena. E ainda colocam a culpa no
outro aluno que construiu os hardwares.
Bons códigos,
-Daniel Negri
----- Original Message -----
From: <[EMAIL PROTECTED]>
To: "flexdev" <[email protected]>
Sent: Friday, January 04, 2008 12:47 AM
Subject: [flexdev] soma de datafield
Gallera, alguem sabe se tem como eu somar um determinando datafild de
todos os registro da minha grid?
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---