Flex, DataGrid et ItemRenderer
Salut, je suis débutant en Flex. Et je souhaite programmer une interface de gestion en Flex.
D'abord, je charge mes données selon le modèle suivant: MySQL -> PHP -> XML et je les affiche sans problème dans mon Datagrid.
Cependant, j'ai des champs en BDD qui sont marqué 1 pour "Oui" et 0 pour "Non"! Ces 0 et 1 apparaissent dans le datagrid, mais je voudrais les remplacer par Non et Oui selon le cas!
J'ai essayé de suivre un fil sur les "ItemRenderer" mais je ne tombe pas sur le bon exemple.
La solution de traiter en amont le XML sur le serveur à l'aide de PHP ne m'intéresse pas non plus!
Merci de m'aider.
il faut utiliser un itemRendrer
crée une classe AS du style BooleanItemrendrer.as donc en gros voila le fonctionnement d'un item rendrer :
1 - tu etends ta classe sur un conteneur HBOX, VBOX ... suivant le item rendrer que tu veux faire, parfois tu peut directement etendre sur le composant luio meme sans passer par un conteneur comme Chekbox ... dans ton cas imagone que tu veux afficher un oui ou non et en plus tu veux mettre une image de ok ou pas c'est juste de l'imagination
2 - que tu rajoute un item rendrer à un datagrid les informations de ton dataprovider passe por un attribut qui s'appell data (tu peu mettre ce ke tu veux dedans )
3 - tu override la fonction set data dans ton itemRendrer et tu lui dis de t'afficher ce ke tu veux car Flex prend l'affichage de l'itemRendrer comme priorité 0 si tu as définit un item Rendere sur une column bref voila le code que tu dois mettre
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| package le package ke tu veu
{
import mx.containers.Box;
import mx.containers.BoxDirection;
import mx.controls.Image;
import mx.controls.Label;
[Bindable]
public class BooleanItemRenderer extends Box
{
private var _lab: Label = new Label();;
public function BooleanItemRenderer()
{
super();
}
/**
* Function needed when implementing a ItemRenderer.
* @param str the string display by default
* @param item the item contained in the list item object (the datProvider of the list).
*/
override public function set data(item : Object) : void
{
if(item){
// dans cette objet tu as la ligne en cours du dataGrid
if(item.champBoolean =="0")
_lab.text = "non";
else
_lab.text = "oui";
}
super.data = item;
}
/**
* function needed when implementing a CellRenderer.
*/
override protected function createChildren() : void
{
super.createChildren();
setStyle('horizontalAlign', 'center') ;
this.direction = BoxDirection.HORIZONTAL;
addChild(_lab);
}
}
} |
4 - voila ton item renderer est prés à etre utilisé
Bon courage pour la suite
Samy
pour les 1 et 2 de la BDD
Citation:
Envoyé par
alain31tl
Je me répête et je ne veux pas me faire trop insistant, mais si tu souhaites voir "OUI" pour 1, et "NON" pour 2, remplace les valeurs d'origine de ton formulaire d'enregistrement.
Sauf chose qui m'échappe, l'ordre de traitement ci-dessus justifie bien que les valeurs sont enregistrées sous "1" et "2", plutôt que "OUI" et "NON".
:)
Bien sur, c'est normal, puisque l'administration était auparavant faite en HTML/PHP, c'est des codes perso qui etait utilisé: 1 pour Oui, 0 pour Non, et encore Mr pour Monsieur, etc
Mais, dans Flex je veux les reformater comme on le faisait en HTML pur.
Les solutions de djmalo et ellene m'ont aider a resoudre le probleme!
Merci
Utiliser Item render et CallLater
Hmmm, cette solution vraiment pro!!!
Mais pour le moment je garde cela à coté: j'ai trouvé mon bonheur avec les LabelFunction :D
Mais une autre question: quelqu'un pourrait m'expliquer l'utilisation de la fonction CallLater ?
Est ce que je peux l'utiliser par exemple pour faire des manipulations sur un dataGrid (comboBox) dont le dataProvider est chargé à distance (via un HTTPService par exemple).
Souvent j'ai des erreurs, car les fonctions se lancent avant que les données ait été complètement chargé. CallLater peut elle être une solution?