2012-05-04 4 views
2

J'essaie de formater certains nombres dans une colonne d'un DataGrid. Je reçois une erreur dans mon programme de test simplifié ci-dessous lorsque je l'exécute. Tous les exemples que j'ai vus jusqu'à présent ont des données de colonne qui sont des chaînes. Y a-t-il un moyen de le faire en utilisant des nombres? Comment modifier le code ci-dessous pour FORMER les valeurs checking?Flex: mise en forme des colonnes DataGrid de nombres

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application 
    xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" 
    xmlns:mx="library://ns.adobe.com/flex/mx"> 

<fx:Script> 
    <![CDATA[  
     [Bindable] 
     public var checking:Array = new Array(1000000.2222, 0, 1000); 

     private function myLabelFunction(item:Array, column:DataGridColumn):String {  
       var result:String; 
       result = myFormatter.format(item); 
       return result; 
     } 
    ]]> 
</fx:Script> 

<fx:Declarations> 
    <s:NumberFormatter id="myFormatter" 
         fractionalDigits="2" 
         decimalSeparator="." 
         groupingSeparator="," 
         useGrouping="true" 
         negativeNumberFormat="0" 
         /> 
</fx:Declarations> 

<mx:DataGrid id="dg1" dataProvider="{checking}" > 

    <mx:columns> 
     <mx:DataGridColumn dataField="checking" headerText="Checking" 
          labelFunction="myLabelFunction" /> 
    </mx:columns> 

</mx:DataGrid> 

</mx:Application> 

Répondre

2
  1. Modifier la signature de la fonction de filtre (item doit être Object)

    private function myLabelFunction(item:Object, column:DataGridColumn):String

  2. Retirez dataField="checking" de la colonne.
+0

Oui, il fonctionne maintenant. Merci beaucoup! – ggkmath

1

Alors que la fonction label fonctionnera certainement - je préfère généralement un ItemRenderer pour des choses comme ça. Vous remplacez la fonction de rendu et vous pouvez ensuite afficher ce que vous voulez dans la "boîte" de la grille.

Un exemple décent est here. Faites défiler environ 1/4 vers le bas pour un exemple DataGrid.

+0

Bon à savoir, merci. Si j'ai déjà un ItemRenderer (non montré) pour d'autres raisons, puis-je simplement ajouter un formateur pour que je n'aie pas besoin d'écrire un autre ItemRenderer? De quoi aurais-je besoin pour changer/ajouter? – ggkmath

+0

Cet exemple utilise un rendu d'élément en ligne, ceux-ci sont directement liés aux colonnes avec lesquelles ils sont "en ligne". Vous pouvez utiliser un rendu d'élément externe (généralement dans son propre fichier de script) et l'associer à autant de colonnes que vous le souhaitez. Vous venez d'écrire des fonctions pour manipuler correctement les données. Cependant, vous obtenez seulement l'objet de données avec un rendu d'élément, alors déterminer exactement ce qu'il faut faire peut être difficile. – debracey

+0

Je suppose que ma question était, quel contrôle utiliserais-je dans ItemRenderer pour faire le formatage? Par exemple, pour changer la couleur du texte, j'utiliserais . Quel contrôle utiliserais-je pour placer le NumberFormatter à l'intérieur? – ggkmath

0

En cas d'objet, vous devez utiliser/No caso de objeto, deve-se USAR:

 private function myLabelFunction(item:Object, column:GridColumn):String {  
      var result:String; 
      result = myFormatter.format(item[column.dataField]); 
      return result; 
     } 
Questions connexes