2009-06-09 7 views
0

Das Problem kann zusammengefasst werden, als wenn ein Element in Datagrid klickt, zeigt der Textbereich den Wert des Elements, aber hier sind die Komponenten getrennt und daher Ereignisse müssen ausgelöst werden.Itemclick-Ereignis in 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> 

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

Das ist mein Haupt MXML-Anwendungsdatei:

<?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> 

Antwort

0

ich denke, es könnte besser sein für studyId beziehen sich auf das dataGrid und nicht das dataGrid, das sich auf studyId bezieht. Sie können diese zu Ihrem Haupt mxml hinzufügen:

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

Dies sollte funktionieren, weil TextArea.text auf die Eigenschaft veränderte Falle DataGrid.selectedItem reagieren, so wird es immer dann, wenn die Auswahl ändert.

EDIT: Dispatching Ereignisse:

Sie ein Ereignis von jedem Ort in Ihrem Code versenden kann und Hörer in der Lage, in diesem Ereignis zu hören. ZB:

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

Jetzt können Sie für dieses Ereignis hören:

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

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

hoffe, das hilft!

<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/> 

Was passiert, ist, wenn ein StudyEvent.STUDYSELECTED Ereignis aus Ihrer Custom gefeuert wird, wird es durch Ihre Hauptfunktion und studySelectedListener gefangen werden aufgerufen.

+0

hey ... Danke für den Vorschlag .... Aber was ist mit der "Studie" als ein Objekt, das aus "StudyId, Name und userId" besteht? Ich muss nur studyId zeigen. Ist auch mein ItemClick-Ereignis korrekt? Wenn ich die Änderung in meiner mxml-Hauptdatei mache und das itemclick-Ereignis so belasse, wie es ist, wird der Code funktionieren? – user120118

+0

Wenn Ihr Objekt StudyId und UserId als Mitglieder hat, können Sie selectedItem.Study durch selectedItem.StudyId ersetzen, da sich das selectedItem auf Ihr Objekt (Study) bezieht. Ihr itemClickHandler ist korrekt, außer Sie haben keinen Zugriff auf die textArea. Was Sie tun könnten, wenn Sie bei Ihrem Event-Handler bleiben möchten, ist das Senden eines Events von Ihrem itemClickHandler. Ihre Hauptperson sollte dieses Ereignis erfassen und darauf reagieren, indem sie die textArea festlegt. Dies ist ähnlich dem, was ich vorgeschlagen habe, die Handler werden nur versteckt, indem bindbare Eigenschaften verwendet werden. – CookieOfFortune

+0

Eine weitere Option besteht darin, DataGrid um eine Unterklasse zu erweitern, die Ihre Hauptklasse als Eigenschaft akzeptiert. Dann kann es auf alle in main enthaltenen Komponenten zugreifen. – CookieOfFortune