2009-06-09 3 views
0

DataGridでアイテムをクリックすると、テキストエリアにアイテムの値が表示されますが、ここではコンポーネントが分かれているため、イベントをディスパッチする必要があります。DataGridのItemclickイベント

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> 

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

これは私のメインMXMLアプリケーションファイルである:私はstudyIdを参照することがより良いかもしれないと思う

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

答えて

0

studyIdを参照するdataGridではなく、dataGrid。あなたのメインMXMLにこれを追加することができます。

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

TextArea.textがDataGrid.selectedItemのプロパティ変更イベントに応答しますので、これは動作するはずなので、それはいつでも選択の変更を変更します。

EDIT:イベントをディスパッチ:

あなたはあなたのコード内の任意の場所からイベントを送出することができ、そしてリスナーがそのイベントに聞くことができるようになります。例:

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

今、あなたはそのイベントをリッスンすることができます

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

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

は、この情報がお役に立てば幸い!

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

何が起こるかというとStudyEvent.STUDYSELECTEDイベントがあなたのcustomComponentから発射されるたびに、それはあなたの主な機能にキャッチされているとstudySelectedListenerが呼び出されます。

+0

ねえ...提案してくれてありがとう....しかし、 "Study"は "StudyId、name and userId"で構成されたオブジェクトです。私はstudyIdだけを表示しなければならない。また、私のItemClickイベントは正しいですか?つまり、メインのmxmlファイルを変更してそのままitemclickイベントを保持すると、コードは動作しますか? – user120118

+0

オブジェクトにStudyIdとUserIdがメンバーとして含まれている場合、selectedItem.StudyをselectedItem.StudyIdに置き換えることができます。これはselectedItemがオブジェクト(Study)を参照するためです。 textAreaにアクセスできない場合を除き、itemClickHandlerは正しいです。あなたのイベントハンドラに固執したいなら、あなたのitemClickHandlerからイベントをディスパッチすることができます。あなたのメインは、そのイベントをキャッチし、textAreaを設定することによって応答する必要があります。これは私が提案したものと似ていますが、ハンドラはバインド可能なプロパティを使用するだけで隠されています。 – CookieOfFortune

+0

もう一つのオプションは、メインクラスをプロパティとして持つサブクラスでDataGridを拡張することです。その後、メインに含まれるすべてのコンポーネントにアクセスできます。 – CookieOfFortune

関連する問題