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.
Version imprimable
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.
Cherche du coté des item renderers.
C'est exactement ce que je cherchais, merci :ccool:
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 :ccool:Code: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: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: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:renderer.tab = dateCollection;
Ca ne marche toujours pas :
Pourtant j'ai déclarer "tab" dans buttonP.mxmlCode:1202: Accès à la propriété non définie tab dans le package renderer.
Code: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:
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:
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:
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: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 :Citation:
Mon tab est déclarer dans mon package "renderer" pourquoi met tu "this" ?
Citation:
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:
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.