2011-10-18 12 views
1

blog.flexexamples.comからこの例を使用しています。DataGridのActionScriptアイテムレンダラー

私はデータグリッドを持っており、データグリッドカラムの1つにボタンを動的に追加しようとしています。しかし、私はこのButtonをItemRendererとしてMXMLではなくActionScriptで記述します。

どうすればいいですか?動的にあなたがこれを行うだろうAS3の構文でボタンを作成する

おかげ

答えて

2

私はこれがあなたが必要と考えるものです。

ActionButtonItemRenderer.as

package 
{ 
    import flash.events.MouseEvent; 

    import mx.controls.Alert; 
    import mx.controls.Button; 
    import mx.controls.listClasses.IDropInListItemRenderer; 
    import mx.controls.listClasses.IListItemRenderer; 
    import mx.core.IFlexDisplayObject; 

    public class ActionButtonItemRenderer extends Button implements IFlexDisplayObject, IListItemRenderer, IDropInListItemRenderer 
    { 
     public var btn:Button; 
     public function ActionButtonItemRenderer() 
     { 
      super(); 
      btn = new Button(); 
      btn.label = "Take Action"; 
      btn.addEventListener(MouseEvent.CLICK,clickHandler); 
      btn.visible = btn.includeInLayout = true; 

     } 

     override protected function clickHandler(event:MouseEvent):void 
     { 
      super.clickHandler(event); 
      Alert.show("Button clicked"); 

     } 
    } 
} 

DynamicDataGridButton.mxml:あなたは、もう少し具体的に関してする必要が

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" minWidth="955" minHeight="600"> 
    <mx:ApplicationControlBar dock="true"> 
     <mx:Button label="Add column" click="init();" /> 
    </mx:ApplicationControlBar> 
    <mx:Script> 
     <![CDATA[ 
      import mx.collections.ArrayCollection; 
      [Bindable] 
      private var arr:ArrayCollection = new ArrayCollection 
       (
        [ 
         {fname:'A',lname:'B'}, 
         {fname:'C',lname:'B'}, 
         {fname:'D',lname:'B'} 
        ]   
       ); 

      private function addDataGridColumn(dataField:String):void { 
       var dgc:DataGridColumn = new DataGridColumn(dataField); 
       dgc.itemRenderer = new ClassFactory(ActionButtonItemRenderer); 
       var cols:Array = dg.columns; 
       cols.push(dgc); 
       dg.columns = cols; 
      } 

      private function init():void { 
       addDataGridColumn("Details"); 
      } 
     ]]> 
    </mx:Script> 
    <mx:DataGrid id="dg" dataProvider="{arr}"> 
     <mx:columns> 
      <mx:DataGridColumn id="dgc1" dataField="fname" headerText="First Name" 
           width="75"/> 
      <mx:DataGridColumn id="dgc2" dataField="lname" headerText=" Last Name" 
           width="150"/> 

     </mx:columns> 
    </mx:DataGrid> 

</mx:Application> 
+0

2011年10月以降何かが変更されたかどうかはわかりませんが、ボタンを拡張しているので、これらのインターフェイスを実装する必要はなく、 'ActionButtonItemRenderer'にButtonを持つ必要はありません。 'this.label =" Take Action ";'を実行するだけです。 ClickhandlerはすでにButtonクラスにも設定されています。とにかく、あなたの答えは正しい方向に私を指していたので、それに感謝します。 –

0

var button:Button = new Button(); 

次にあなたがボタンを作成した後、あなたはそれがこのようなプロパティだ設定することができます。

button.label = "Click Me!"; 

最後に、次のようにアイテムのいずれかに追加します。

それは実際にかかわらず、働くだろう

<mx:DataGrid id="myDG" variableRowHeight="true"> 
    <mx:columns> 
    <mx:DataGridColumn dataField="label" headerText="Labels"/> 
    <mx:DataGridColumn dataField="button" headerText="Buttons"/> 
    </mx:columns> 
</mx:DataGrid> 

わからない場合、あなたはthis exampleのような全体の列上のボタンのitemRendererを持っている必要があり:0

次に、あなたは、このようにレイアウトされ、あなたのデータグリッドにそれを送ります。

+0

これは動作しません。.. –

+0

あなたが良い答えをしたいのなら、あなたの質問に。あなたはActionScriptでボタンを作成する方法を尋ねました。私はあなたにその答えを与えました。あなたは何をしようとしていますか?おそらく1つまたは2つのコードブロックを提供するでしょうか? – Batkins

関連する問題