PDA

Volledige versie bekijken : CurrencyFormatter en grand total van column


dimiorla
%Europe/Berlin %841 %2009, 21:11
Hoi idereen,

Ik heb vogens mij twee bug of error in mijn code.
De grand total van mijn column wordt niet met creationComplete geladen maar ik moet deze via de knop laden.
En als ik op een row op Cost column klick en wegklick dan deze krijgt twee extra getalen deze heeft met de precision="2" van CurrencyFormatter te maken maar hoe hou ik de functie zonde de bug.

Bij voorbaat dank,
Dimitris Orlandos.


<?xml version="1.0" encoding="utf-8"?>
<mx:Application creationComplete="loadData()" styleName="plain" xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" height="376" xmlns:ordersopenservice="services.ordersopenservice.*">
<mx:Script>
<![CDATA[
import mx.events.FlexEvent;
import mx.controls.Alert;
import mx.collections.ArrayCollection;

privatefunction loadData():void
{
calculateTotalColumn();
initApp();
}

privatefunction initApp():void
{
dataGrid.dataProvider = new ArrayCollection([
{Type:'Normal', Desc:'Normal 20/20', Cost:0},
{Type:'None', Desc:'Player has no optical receptors', Cost:-2},
{Type:'Enhanced', Desc:'Enhanced Vision', Cost:5},
{Type:'Infrared', Desc:'Player can see heat sources', Cost:5}
]);
}


publicfunction formatPrice(item:Object, column:DataGridColumn):String
{
var returnValue:String = setCurrencyFormat.format(item.Cost);
return returnValue;
}

[Bindable]
privatevar totalColumn:Number = 0;
privatefunction calculateTotalColumn():void
{
for each (var row:Object in dataGrid.dataProvider)
{
totalColumn += Number(row.Cost);
}
}

]]>
</mx:Script>

<mx:CurrencyFormatter id="setCurrencyFormat" precision="2" rounding="none" decimalSeparatorTo=","
thousandsSeparatorTo="." useThousandsSeparator="true" useNegativeSign="true" currencySymbol="€" alignSymbol="left"/>

<mx:Text text="{setCurrencyFormat.format(totalColumn)}" x="363" y="240" height="35" fontWeight="bold" fontSize="16" id="text1" fontFamily="Eurostile" width="77" />

<mx:Button id="b1"
label="calculate"
click="calculateTotalColumn()"
x="352" y="298" />
<mx:DataGrid id="dataGrid" editable="true" width="348" height="205" x="22" y="10">
<mx:columns>
<mx:DataGridColumn dataField="Type"/>
<mx:DataGridColumn dataField="Desc"/>
<mx:DataGridColumn dataField="Cost" labelFunction="formatPrice"/>
</mx:columns>
</mx:DataGrid>

</mx:Application>

Sjoedzj
%Europe/Berlin %709 %2009, 18:02
Ik heb ook weleens een probleem gehad met de decimalSeparatorTo="," en de thousandsSeparatorTo=".".
Ik denk dat het er iets mee te makne heeft dat deze twee niet tegelijk worden gedaan. Wat je dan dus krijgt is dat hij $100,000.00 eerst om gaat zetten naar $100,000,00 en daar kan hij niks mee.
Ik geloof dat ik het toen gehacked heb met twee currencyFormatters. waarbij je de eerste de boel omzet naar $100.000@00 en de tweede om de @ naar een , om te zetten zodat je $100.000,00 krijgt.

Er is vast een nettere manier maar dit werkte bij mij toen.

dimiorla
%Europe/Berlin %962 %2009, 00:06
@Sjoedzj: Dank je voor de tip die heeft aan het denken gezet

Voor geïnteresseerde, dit is mijn work around.
Als er beter maneer is, laat me even weten aub.

Ik moet de creationComplete laden probleem nog oplosen
dat doe ik denk ik met een EventListener


privatefunction calculateTotalColumn(evt:CollectionEvent):void
{
var totalColumn:Number = 0;
for each (var row:Object in OrdersOpenDataGrid.dataProvider)
{
totalColumn += Number(row.total_price);
}
text1.text = setCurrencyFormat.format(totalColumn.toFixed(2));
}


<mx:CurrencyFormatter id="setCurrencyFormat" useNegativeSign="true" currencySymbol="€" alignSymbol="left"/>