2010-09-14 10 views
2

Voici ce que je veux faire: Je veux avoir une grille de données qui affiche une valeur totale pour chaque ligne. Disons par exemple que j'ai un DataGrid. Dans cette grille de données sur chaque ligne, j'ai cinq colonnes. Sur les cinq colonnes, quatre sont pour l'utilisateur d'entrer des nombres. La cinquième colonne est la colonne "total" qui est le résultat d'une formule qui calcule les quatre colonnes précédentes sur cette ligne dans laquelle l'utilisateur entre les nombres.Création d'une colonne "Total" dans DataGrid Flex

exemple:

Ligne 1: (première colonne) 200 + (deuxième colonne) 300 - (troisième colonne) 100 + (colonne 4E) 90 = (TOTAL COLONNE) 490

Ligne 2: (1ère colonne) 400 + (2e colonne) 300 - (3e colonne) 50 + (colonne 4E) 90 = (TOTAL COLONNE) 740

ligne 3: etc ...

Ive travaillé sur ce pendant des heures Quelqu'un at-il des suggestions sur la façon de le faire?

Toute aide est grandement appréciée!

Répondre

6

Utilisez labelFunction

<mx:DataGrid id="dg" width="100%" height="100%" rowCount="5" dataProvider="{employees}"> 
    <mx:columns> 
     <mx:DataGridColumn dataField="d1" headerText="Data 1"/> 
     <mx:DataGridColumn dataField="d2" headerText="Data 2"/> 
     <mx:DataGridColumn dataField="d3" headerText="Data 3"/> 
     <mx:DataGridColumn labelFunction="getTotal" headerText="Total" /> 
    </mx:columns> 
</mx:DataGrid> 

Script:

public function getTotal(item:Object, column:DataGridColumn):String 
{ 
    var sum:Number = item.d1 + item.d2 + item.d3; 
    return sum.toString(); 
} 
+0

+1, belle réponse concise. –

1

Ajoutez une valeur totale aux objets que vous transmettez dans le tableau en tant que fournisseur de données. Calculez le total avant de les afficher en faisant défiler tous les éléments.

1

Vous pouvez écrire un labelFunction et y effectuer le calcul, vous n'avez donc pas besoin de changer votre dataProvider.

<mx:DataGridColumn headerText="total" 
      labelFunction="{myLabelFunc}"/> 

et la fonction:

public static function myLabelFunc(item:Object, column:DataGridColumn):String { 
    // do your calculation 
    return result; 
} 
2

Bien qu'il semble être trop tard pour un nouveau commentaire, je pour ajouter ça: Si vous voulez mettre à jour la colonne totale chaque fois que l'utilisateur change une valeur des autres colonnes, vous devez ajouter: new Number, avant son une des valeurs.

var sum:Number = new Number(item.d1) + new Number(item.d2) + new Number(item.d3);