Salut,
Je souhaite ajouter des boutons dans la première colonne d'un datagrid. Ce bouton m'affichera une alerte avec le contenu de la seconde colonne (du texte).
Comment puis-je faire ca ?
Merci.
Salut,
Je souhaite ajouter des boutons dans la première colonne d'un datagrid. Ce bouton m'affichera une alerte avec le contenu de la seconde colonne (du texte).
Comment puis-je faire ca ?
Merci.
C'est exactement ce que je cherchais, merci
J'ai encore un petit problème, j'ai déclaré un array en public dans mon main.mxml (package par défaut), j'aimerai y accéder dans mon buttonP.mxml pour pouvoir afficher le contenu de la ligne du dataGrid lorsque je clique sur le fameux bouton.
Pour accéder a un package depuis le package par défaut il suffit de taper "nomduPackage.composant", comment faire l'inverse...
Ton main.mxml c'est un mx:Application ?
Tu dois pouvoir faire
N'oublie pas le tag résolu
Code : Sélectionner tout - Visualiser dans une fenêtre à part Application.application.tonArray
Charles.
C'est un s:Application, "Application.application" ne marche pas.
Tu peux exposer une propriété publique de type Array dans ton ItemRenderer et lui assigner comme valeur le Array du "main".
D'accord mais j'assigne la valeur comment ?
monArray = XXX.monArrayDuMain; Que dois-je mettre a la place des XXX.
Tu l'assignes de l'extérieur, dans le main, là où tu utilises l'ItemRenderer.
Dans mon main.mxml j'ai mis
"renderer" c'est mon package,
Code : Sélectionner tout - Visualiser dans une fenêtre à part renderer.buttonP.tab = dateCollection;
"buttonP" le non du composant,
"tab" un ArrayCollection déclaré en public dans buttonP.mxml
J'ai ce message d'erreur :Je dois forcément merder quelque part..
Code : Sélectionner tout - Visualiser dans une fenêtre à part 1119: Accès à la propriété tab peut-être non définie, via la référence de type static Class
La propriété devant être définie au niveau du renderer ça donnerait plutôt :
Code : Sélectionner tout - Visualiser dans une fenêtre à part renderer.tab = dateCollection;
Ca ne marche toujours pas :
Pourtant j'ai déclarer "tab" dans buttonP.mxml
Code : Sélectionner tout - Visualiser dans une fenêtre à part 1202: Accès à la propriété non définie tab dans le package renderer.
Code : Sélectionner tout - Visualiser dans une fenêtre à part public var tab:ArrayCollection = new ArrayCollection();
Comment est défini ton renderer et comment est-il utilisé ?
Tu peux procéder de cette façon : http://www.remwebdevelopment.com/dev...mRenderer.html
Voici comment j'utilise mon renderer
Main.mxml :
Et voici mon buttonP.mxml :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 <mx:DataGrid id="render" dataProvider="{dateCollection}" color="0x000000" height="100%" width="100%" itemClick="goto()"> <mx:columns> <mx:DataGridColumn dataField="keyword" headerText="Mots Clefs"/> <mx:DataGridColumn dataField="descr" headerText="Descrption"/> <mx:DataGridColumn dataField="lien" headerText="Lien"/> <mx:DataGridColumn dataField="date" headerText="Date"/> <mx:DataGridColumn dataField="ponderation" headerText="Ponderation"/> <mx:DataGridColumn itemRenderer="renderer.buttonP" headerText="Choix"/> </mx:columns> </mx:DataGrid>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 <?xml version="1.0" encoding="utf-8"?> <mx:VBox xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" width="400" height="300"> <fx:Script> <![CDATA[ import mx.collections.ArrayCollection; import mx.controls.*; import mx.events.*; public var tab:ArrayCollection = new ArrayCollection(); public function clk():void { //afficher les infos } public var myMenu:Menu; protected function showHandler():void { myMenu = Menu.createMenu(null, myMenuData, false); myMenu.labelField="@label"; myMenu.show(stage.mouseX, stage.mouseY); myMenu.addEventListener(MenuEvent.CHANGE, onMenuChange); } public function onMenuChange(e:MenuEvent):void { Alert.show(e.label); } ]]> </fx:Script> <fx:Declarations> <fx:XML format="e4x" id="myMenuData"> <root> <menuitem label="Classer dans .."> <menuitem label="Important" groupName="one"/> <menuitem label="Plus tard" groupName="one"/> </menuitem> </root> </fx:XML> </fx:Declarations> <s:Button id="butn" label="Supprimer" click="clk()"/> <s:Button id="ad" label="Classer dans" click="showHandler()"/> </mx:VBox>
Il faut gérer la création de tes renderers :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 <fx:Script> ... private function dg_creationComplete():void { var factory:ClassFactory = new ClassFactory(renderer.buttonP); factory.properties = {tab:this.tab}; dgc.itemRenderer = factory; } ... </fx:Script> ... <mx:DataGrid id="dg" ... creationComplete="dg_creationComplete()"> <mx:columns> ... <mx:DataGridColumn id="dgc" headerText="Choix"/> </mx:columns>
Je ne comprend pas ce que tu veux faire avec ce bout de code ? Mon tab est déclarer dans mon package "renderer" pourquoi met tu "this" ?
Du coup ca me ressort un message d'erreur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part 1119: Accès à la propriété tab peut-être non définie, via la référence de type static Main. Main.mxml
"this" est l'Application, et "tab" le tableau défini par celle-ci, celui dont tu parles ici :Mon tab est déclarer dans mon package "renderer" pourquoi met tu "this" ?
j'ai déclaré un array en public dans mon main.mxml (package par défaut)
J'ai réglé le problème en mettant "dateCollection" a la place de "tab"
En revanche je n'arrive toujours pas a accéder aux valeurs de mon "dateCollection" dans mon package renderer...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 private function dg_creationComplete():void { var factory:ClassFactory = new ClassFactory(renderer.buttonP); factory.properties = {tab:this.dateCollection}; dgc.itemRenderer = factory; }
Si tu as bien déclaré une propriété "tab" dans le renderer tu ne devrais pas avoir de soucis.
C'est cette propriété qui recevra la valeur du tableau "this.dateCollection".
Ça marche nickel parfait, un grand merci a toi.
Partager