2009-06-09 7 views
0

Le problème peut être résumé comme lorsque vous cliquez sur un élément dans datagrid, la zone de texte affiche la valeur de l'élément, mais ici les composants sont séparés et donc les événements doivent être distribués.L'événement Itemclick dans datagrid

My mxml component file : 

<?xml version="1.0" encoding="utf-8"?> 
<mx:DataGrid xmlns:mx="http://www.adobe.com/2006/mxml" itemClick="itemClickEvent(event);" creationComplete="init()"> 

<mx:Metadata> 
    [Event(name="IdSelected", type="one.IdEvent")] 
</mx:Metadata> 

<mx:Script> 
<![CDATA[  import genericReport.*; 
       import crewUtilization.*; 
       import utils.*; 
       import studies.*; 
       import mx.rpc.events.FaultEvent; 
       import mx.rpc.events.ResultEvent; 
       import mx.controls.Alert; 
       import mx.events.ListEvent; 


     private function itemClickEvent(event:ListEvent):void 
     { 
      var _study:Object=event.currentTarget.selectedItem.study; 
      dispatchEvent(new IDEvent(_ID));  
     } 


]]> 

</mx:Script> 

<mx:columns> 

<mx:DataGridColumn dataField="name" /> 
<mx:DataGridColumn dataField="userId" /> 
</mx:columns> 
</mx:DataGrid> 

/////////////////////////////////////////// ////////////////////

Ceci est mon principal MXML dossier de candidature:

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:custom="*"> 
<mx:TitleWindow label="Scenario Creation" xmlns:mx="http://www.adobe.com/2006/mxml" 
xmlns:ns1="ccCreation.*"> 

<mx:Label text="CC CREATION" width="100%" /> 
<mx:VBox width="100 %" styleName="scenariovboxStyle"> 

<custom:studySelector id="dg" /> 
</mx:VBox> 
</mx:TitleWindow> 
</mx:Application> 

Répondre

0

Je pense qu'il pourrait être mieux pour STUDYID de se référer à le dataGrid plutôt que le dataGrid faisant référence à studyId. Vous pouvez ajouter à votre principale MXML:

<mx:TextArea id="studyId" text="{dataGrid.selectedItem.Study}"/> 

Cela devrait fonctionner parce que TextArea.text répondra à la propriété événement a changé de DataGrid.selectedItem, il changera chaque fois que les changements de sélection.

EDIT: Distribution d'événements:

Vous pouvez distribuer un événement de tout lieu dans votre code, et les auditeurs pourront écouter cet événement. Par exemple:

<mypackage:MyComponent> 
... 
private function foo():void 
{ 
    dispatchEvent(new MouseEvent(MouseEvent.CLICK)); // Dispatches a mouse event whenever foo is called. 
} 

Maintenant vous pouvez écouter cet événement:

<mypackage:MyComponent id="myComponent"/> 
... 
myComponent.addEventListener(MouseEvent.CLICK, mouseClickHandler); 

private function mouseClickHandler(event:MouseEvent):void 
{ 
    ... // code to handle that event here. 
} 

Hope this helps!

<mx:MainComponent creationComplete="init()" ...> 
    ... 
    private function init(event:Event):void 
    { 
     ... 
     customComponent.addEventListener(StudyEvent.STUDYSELECTED, studySelectedListener); 
     ... 
    } 

    private function studySelectedListener(event:StudyEvent):void 
    { 
     studyid.text = event.study.studyId; // or wherever you store your studyId value 
     ... 
    } 
    ... 
<mx:MainComponent/> 

Ce qui se passe est chaque fois qu'un événement StudyEvent.STUDYSELECTED est tiré de votre CustomComponent, il sera pris par votre fonction principale et studySelectedListener sera appelée.

+0

hey ... Merci pour la suggestion .... Mais, qu'en est-il du 'Study' étant un objet qui se compose de "StudyId, name et userId". Je dois montrer seulement studyId. De plus, mon événement ItemClick est-il correct? c'est-à-dire que si je fais la modification dans mon fichier mxml principal et que je garde l'événement itemclick tel quel, le code fonctionnera-t-il? – user120118

+0

Si votre objet a StudyId et UserId en tant que membres, vous pouvez remplacer selectedItem.Study par selectedItem.StudyId, car l'élément selected se référera à votre objet (Study). Votre itemClickHandler est correct, sauf que vous n'avez pas accès à textArea. Ce que vous pourriez faire si vous vouliez rester avec votre gestionnaire d'événements, c'est d'envoyer un événement à partir de votre itemClickHandler. Votre principal doit attraper cet événement et répondre en définissant textArea. Ceci est similaire à ce que j'ai suggéré, les gestionnaires sont juste cachés en utilisant des propriétés bindable. – CookieOfFortune

+0

Une autre option consiste à étendre DataGrid avec une sous-classe qui prend votre classe principale en tant que propriété. Ensuite, il peut avoir accès à tous les composants contenus dans main. – CookieOfFortune