blog.flexexamples.comからこの例を使用しています。DataGridのActionScriptアイテムレンダラー
私はデータグリッドを持っており、データグリッドカラムの1つにボタンを動的に追加しようとしています。しかし、私はこのButtonをItemRendererとしてMXMLではなくActionScriptで記述します。
どうすればいいですか?動的にあなたがこれを行うだろうAS3の構文でボタンを作成する
おかげ
blog.flexexamples.comからこの例を使用しています。DataGridのActionScriptアイテムレンダラー
私はデータグリッドを持っており、データグリッドカラムの1つにボタンを動的に追加しようとしています。しかし、私はこのButtonをItemRendererとしてMXMLではなくActionScriptで記述します。
どうすればいいですか?動的にあなたがこれを行うだろうAS3の構文でボタンを作成する
おかげ
私はこれがあなたが必要と考えるものです。
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>
:
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
次に、あなたは、このようにレイアウトされ、あなたのデータグリッドにそれを送ります。
これは動作しません。.. –
あなたが良い答えをしたいのなら、あなたの質問に。あなたはActionScriptでボタンを作成する方法を尋ねました。私はあなたにその答えを与えました。あなたは何をしようとしていますか?おそらく1つまたは2つのコードブロックを提供するでしょうか? – Batkins
2011年10月以降何かが変更されたかどうかはわかりませんが、ボタンを拡張しているので、これらのインターフェイスを実装する必要はなく、 'ActionButtonItemRenderer'にButtonを持つ必要はありません。 'this.label =" Take Action ";'を実行するだけです。 ClickhandlerはすでにButtonクラスにも設定されています。とにかく、あなたの答えは正しい方向に私を指していたので、それに感謝します。 –