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>

Reply via email to