前回の「itemRendererで編集したデータをdataProviderに反映させる」では、
itemRendererにtextInputを使用しました。
今回はcheckBoxを使用してみます。
前回同様、2つのデータグリッド間でうまく連携できるでしょうか?
サンプルコードは次の通りです。
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> <mx:Script> <![CDATA[ import mx.collections.ArrayCollection; [Bindable] private var initDG:ArrayCollection = new ArrayCollection([ {Album:true}, {Album:true} ]); ]]> </mx:Script> <mx:VBox> <mx:DataGrid id="dg1" dataProvider="{initDG}" width="300" editable="true"> <mx:columns> <mx:DataGridColumn headerText="Album" dataField="Album" rendererIsEditor="true"> <mx:itemRenderer> <mx:Component> <mx:CheckBox/> </mx:Component> </mx:itemRenderer> </mx:DataGridColumn> </mx:columns> </mx:DataGrid> <mx:DataGrid id="dg2" dataProvider="{initDG}" width="300" editable="true"> <mx:columns> <mx:DataGridColumn headerText="Album" dataField="Album" rendererIsEditor="true"> <mx:itemRenderer> <mx:Component> <mx:CheckBox/> </mx:Component> </mx:itemRenderer> </mx:DataGridColumn> </mx:columns> </mx:DataGrid> </mx:VBox> </mx:Application>
前回からの変更点は以下4点。
・itemRendererをテキストインプットからチェックボックスに変更
・DataGridColumnのプロパティに「rendererIsEditor=true」を追加
※アイテムレンダラーをアイテムエディタとして使用するため
・初期値(initDG)を文字列から「true」に変更
※チェックボックスに変更したため
・確認ボタンと、押下時の処理を削除
それでは起動してみます。
1行目のチェックボックスの選択を解除してフォーカスアウトしてみます。
そうすると次のエラーが発生しました。
ReferenceError: Error #1069: itemRendererSample_inlineComponent1 にプロパティ text が見つからず、デフォルト値もありません。
これは、DataGridColumnのeditorDataField プロパティのデフォルト値が 「text」なためです。
アイテムレンダラーで使用しているチェックボックスはtextプロパティを持っていません。
これを解消するにはDataGridColumnのediterDataFieldプロパティにcheckBoxのプロパティである「selected」を指定します。
実際のコードは以下のようになります。
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> <mx:Script> <![CDATA[ import mx.collections.ArrayCollection; [Bindable] private var initDG:ArrayCollection = new ArrayCollection([ {Album:true}, {Album:true} ]); ]]> </mx:Script> <mx:VBox> <mx:DataGrid id="dg1" dataProvider="{initDG}" width="300" editable="true"> <mx:columns> <mx:DataGridColumn headerText="Album" dataField="Album" rendererIsEditor="true" editorDataField="selected"> <mx:itemRenderer> <mx:Component> <mx:CheckBox/> </mx:Component> </mx:itemRenderer> </mx:DataGridColumn> </mx:columns> </mx:DataGrid> <mx:DataGrid id="dg2" dataProvider="{initDG}" width="300" editable="true"> <mx:columns> <mx:DataGridColumn headerText="Album" dataField="Album" rendererIsEditor="true" editorDataField="selected"> <mx:itemRenderer> <mx:Component> <mx:CheckBox/> </mx:Component> </mx:itemRenderer> </mx:DataGridColumn> </mx:columns> </mx:DataGrid> </mx:VBox> </mx:Application>
早速起動して、先程と同じように1行目のチェックボックスの選択を解除してフォーカスアウトします。
すると、今度はエラーも発生せず、データグリッド間の連携もうまくいきました。
意外とはまりそうなので、覚え書きしておきました…