2009-04-21 11 views
1

J'ai une petite question à propos de rendre les cellules AdvancedDataGrid.Mise en forme AdvancedDataGrid cellules

J'ai besoin de la cellule couleur programatically du DataGrid en fonction des conditions. Disons, les cotations boursières. S'il y a une augmentation par rapport au jour précédent, je dois avoir la cellule colorée en VERT et en ROUGE, quand il y a une diminution.

Maintenant, la partie importante ici est, je dois faire ces choses de façon dynamique, ce qui signifie que, lorsque l'utilisateur permet la comparaison/conditions, puis les cellules sont colorées. Et lorsque l'utilisateur désactive la comparaison, il revient à son comportement par défaut.

Je sais que je dois utiliser équarrisseurs. Mais pas sûr, comment l'utiliser pour les cellules et cela aussi de manière dynamique. Quelqu'un peut-il expliquer s'il vous plaît comment y aller?

Merci

Répondre

3

renderers article sont des composants utilisés pour définir l'apparence des « articles » ou d'un composant sous-. Dans le cas de l'ADG, les "items" sont les cellules individuelles. Vous pouvez créer une classe entièrement personnalisée pour fonctionner comme moteur de rendu (étant donné qu'elle implémente certaines interfaces requises) ou, dans la plupart des cas, vous étendez un composant existant. Étant donné que le rendu par défaut pour les cellules ADG ne prend pas en charge les couleurs d'arrière-plan, vous devez créer ou étendre un composant qui le fait et l'utiliser comme moteur de rendu. C'est la prémisse de base que ces tutoriels, liés à la question suivante, les travaux de:

Setting background color for datagrid row in Adobe Flex

Après avoir créé un itemRenderer qui prend en charge une couleur d'arrière-plan, vous avez deux options quant à l'endroit où vous pouvez définir votre " conditions"; à l'intérieur du itemRenderer ou en utilisant la fonction styleFG de l'ADG (en plus, l'itemRenderer doit définir un style "background").

Dans votre cas, vous pouvez inclure les valeurs des prix des actions de est à la fois aujourd'hui et hier dans les données envoyées à chaque cellule et comparer les deux pour déterminer la couleur utilisée pour dessiner l'arrière-plan. Encore une fois, plus sur cela dans les liens tutoriels fournis ci-dessus. Dans tous les itemRenderer ou styleFunction, vous devez comparer les propriétés sur l'objet de données de l'itemRenderer/styleFunction (correspondant à la ligne que vous regardez), par exemple:

if(data.today > data.yesterday) 
{ 
    // set color or return style 
} 
else ... 

Pour « toggle » couleurs de cellule personnalisée, basculer entre votre moteur de rendu personnalisé et le moteur de rendu par défaut (incolore). En d'autres termes, définissez la propriété itemRenderer sur votre classe itemRenderer personnalisée lorsque vous avez besoin d'afficher les couleurs et que vous les définissez sur "null" lorsque vous souhaitez utiliser le "comportement par défaut".

+0

Merci pour votre réponse. Je pourrais utiliser ITEMRENDERER pour l'une de mes colonnes où je dois afficher ROUGE/VERT si la valeur est supérieure/inférieure à 0. Mais je trouve toujours difficile de comparer la cellule avec les autres cellules de la même rangée. Comme dans, j'ai 2 colonnes AUJOURD'HUI, HIER. J'ai besoin de peindre AUJOURD'HUI basé sur les valeurs d'AUJOURD'HUI et d'HIER. Ce qui signifie, si pour une ligne AUJOURD'HUI> HIER, AUJOURD'HUI sera VERT sinon il sera ROUGE. – online19

+0

Bien que vous puissiez faire des comparaisons entre les colonnes à l'intérieur du itemRenderer, il serait probablement beaucoup plus facile pour vous de prendre soin d'elle avant d'attribuer un fournisseur de données à l'ADG. Par exemple, vous pouvez créer une nouvelle propriété sur l'objet de données dans le fournisseur de données, par exemple une valeur booléenne "higherThanYesterday". Calculez-le et puis colorez simplement selon la valeur de cette propriété. – Stiggler

+0

Je ne suis pas autorisé à modifier la requête si. Vous avez mentionné qu'il est possible de faire des comparaisons entre les colonnes à l'intérieur de itemRenderer. Pouvez-vous s'il vous plaît me diriger vers n'importe quelle ressource où je peux apprendre à en savoir plus? – online19