2012-02-27 5 views
0

J'ai un DataGrid dans mon application mobile (je sais, je sais, mais il n'y a actuellement pas d'autre solution pour cela), que les valeurs numériques. En fonction de la valeur d'une cellule, le texte est coloré. Mon gros problème est que cela ne fonctionne pas très bien pour plus de 5 lignes de données. Je pense que le problème est que la fonction set text (dans laquelle je formate la couleur) ne peut pas suivre le nombre de changements de cellule et formate le texte en fonction de la dernière cellule mise à jour de la ligne. J'ai pensé à un rendu d'élément de colonne afin que le moteur de rendu ne reçoive que la valeur de cette colonne, et non les données entières de la ligne.Limite Flex Spark DataGrid ItemRenderer données à la colonne

Est-ce que quelque chose comme ça est possible? Juste pour référence, c'est mon moteur de rendu actuel (encore une fois, cela fonctionne bien pour quelques lignes, pour 5 + de données changeant rapidement, cela ne fonctionne plus, les cellules sont formatées même si leurs données n'ont pas modifié).

public class ColorGridItemRenderer extends DefaultGridItemRenderer 
{ 
    public function ColorGridItemRenderer() { 
     super(); 
    }   

    override public function set text(value:String):void { 
     if (!value) 
      value = ""; 

     if(Number(value) > Number(text) && text!="") 
       setStyle("color", 0x40c040); 
      else if(Number(value) < Number(text) && text!="") 
       setStyle("color", 0xf05050); 
      else 
       setStyle("color", 0xc1c1c1); 
     } 

     super.text = value; 
    } 
} 

Edit: Je viens revérifié et doivent revenir ma déclaration précédente. Une seule ligne fonctionne bien, la deuxième rangée perturbe déjà la mise en forme des couleurs. Il semble que la grille de données jette les valeurs ensemble. Le formatage des couleurs dans la méthode des données d'ensemble affiche exactement le même effet;

override public function set data(value:Object):void { 

     if(value && data) { 

      label = value[column.dataField]; 

      if(value[column.dataField] > _oldVal && _oldVal != 0) 
       setStyle("color", 0x40c040); 
      else if(value[column.dataField] < _oldVal) 
       setStyle("color", 0xf05050); 
      else 
       setStyle("color", 0xc0c0c0); 

      _oldVal = value[column.dataField]; 
     } 
     super.data = value; 

    } 

Edit2: Mon hypothèse sur la grille chambouler les données du ItemRenderer semble être correct. Une trace simple dans la méthode de données set (trace ("old:" + _oldVal + "new:" + value [colonne.dataField]);) a révélé que d'une certaine manière, les valeurs de la ligne de grille suivante (au cas où il y en a 2) s'habituer ainsi que _oldVal obtient l'ancienne valeur de la ligne suivante.

+0

Dieu je suis stupide. Ne pas appeler super pourrait être une bonne idée ...;) Problème résolu. – AlBirdie

Répondre

0

Juste pour référence: Appeler super sur la fonction surchargée définit la valeur à la superclasse, mélangeant ainsi les valeurs des lignes. Le laisser de la fonction résout le problème.

Questions connexes