Bom dia a Todos,
Actualmente estou a desenvolver uma aplicação em Flex, cuja a mesma têm uma
DataGrid editavel onde tenho campos numéricos e estou a usar a
labelfunction para formatar estes campos, o meu problema é que cada vez que
o cursor passa por este campo o mesmo ganha não sei quantos 000000.
Depois de algumas horas na web, encontrei um artigo sobre este assunto no
forum da adobe, que depois das alterações sugeridas fiquei com um novo
problema que é que quando o valor do campo é 0 ele não altera o valor.
http://forums.adobe.com/thread/431165
Necessito da vossa ajuda por favor.
Código do mxml em anexo
Marco
--
Você recebeu esta mensagem porque está inscrito na lista "flexdev"
Para enviar uma mensagem, envie um e-mail para flexdev@googlegroups.com
Para sair da lista, envie um email em branco para
flexdev-unsubscr...@googlegroups.com
Mais opções estão disponíveis em http://groups.google.com/group/flexdev
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="vertical"
backgroundColor="white">
<mx:Script>
<![CDATA[
import mx.controls.Alert;
import mx.events.DataGridEventReason;
import mx.controls.TextInput;
import mx.controls.dataGridClasses.DataGridColumn;
import mx.formatters.NumberFormatter;
import mx.events.DataGridEvent;
import mx.collections.ArrayCollection;
[Bindable] private var collection:ArrayCollection = new
ArrayCollection([
{code:1, description:"Item 1", value:45.89},
{code:2, description:"Item 2", value:0},
{code:3, description:"Item 3", value:0},
{code:4, description:"Item 4", value:0},
{code:5, description:"Item 5", value:0},
{code:6, description:"Item 6", value:0},
{code:7, description:"Item 7", value:0}
]);
private var formatter:NumberFormatter;
private function formatterFunction(item:Object,
column:DataGridColumn):String {
if (formatter == null){
formatter = new NumberFormatter();
formatter.decimalSeparatorTo = ",";
formatter.thousandsSeparatorTo = ".";
formatter.decimalSeparatorFrom = ",";
formatter.thousandsSeparatorFrom = ".";
formatter.useThousandsSeparator = true;
formatter.precision = 2;
}
return formatter.format(item[column.dataField]);
}
private function
editEndHandler(event:DataGridEvent):void {
var myEditor:TextInput =
TextInput(event.currentTarget.itemEditorInstance);
var newVal:Number =
isNaN(Number(myEditor.text)) ? myEditor.text as Number : 0.0000;
var oldVal:Number =
Number(event.currentTarget.editedItemRenderer.data[event.dataField]);
if (event.reason ==
DataGridEventReason.CANCELLED || event.reason == DataGridEventReason.OTHER ||
oldVal == newVal) {
event.preventDefault();
dg.destroyItemEditor();
return;
}
}
]]>
</mx:Script>
<mx:Label text="Bug datagrid editavel com labelFunction"
fontSize="16"
fontWeight="bold" />
<mx:DataGrid dataProvider="{collection}"
editable="true"
itemEditEnd="editEndHandler(event)" id="dg">
<mx:columns>
<mx:DataGridColumn headerText="Código"
dataField="code"
editable="false"/>
<mx:DataGridColumn headerText="Descrição"
dataField="description"
editable="true"/>
<mx:DataGridColumn headerText="Valor"
width="300"
dataField="value"
labelFunction="formatterFunction"
editable="true" textAlign="right"/>
</mx:columns>
</mx:DataGrid>
</mx:Application>