Home > Flash | WEB > Flex AdvancedDataGrid 矢印キーでセル移動して編集

Flex AdvancedDataGrid 矢印キーでセル移動して編集


セル選択後と矢印キーで移動


NumericStepeprで編集して移動
(デフォルトでは矢印キーで数字変えちゃうのでそっちは殺してます)

DataGrid内のセルを矢印キーで選択して編集、というのをやりたくて、
調べて下記リンクのサンプルを見つけたんだけど、Flex 3ではこのままでは使えませんでした。

 → スプレッドシートのように単一セルを選択、編集できるデータグリッド

もうちょっと調べてみたところ、
DataGridColumn, AdvancedDataGridColumnのitemRenderer, itemEditorプロパティに、
自作のコンポーネントを割り当てればできそう。
http://livedocs.adobe.com/flex/3_jp/html/help.html?content=cellrenderer_4.html
http://www.necst.co.jp/product/ibiz/column/flex/chap17.html

というわけで、itemEditorにTextInputを継承した、TextInputRendererを割り当てて、
カーソルキーイベントを拾うようにして、移動可能とさせます。

GridTest.mxml

XML:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="502" height="220">
  3.     <mx:Script>
  4.         <![CDATA[
  5.             import mx.collections.ArrayCollection;
  6.                  
  7.             [Bindable]
  8.             private var dp_flat:ArrayCollection = new ArrayCollection([
  9.               {col_a:"test_1_1", col_b:"test_2_1", col_c:"test_3_1"},
  10.               {col_a:"test_1_2", col_b:"test_2_2", col_c:"test_3_2"},
  11.               {col_a:"test_1_3", col_b:"test_2_3", col_c:"test_3_3"},
  12.               {col_a:"test_1_4", col_b:"test_2_4", col_c:"test_3_4"},
  13.               {col_a:"test_1_5", col_b:"test_2_5", col_c:"test_3_5"}
  14.             ]);
  15.         ]]>
  16.     </mx:Script>
  17.     <mx :P anel x="10" y="10" width="480" height="204" layout="absolute" title="AdvancedDataGrid">
  18.         <mx:AdvancedDataGrid x="5" y="5" id="test_adg" designViewDataType="flat" width="449" height="152" dataProvider="{dp_flat}" editable="true">
  19.             <mx:columns>
  20.                 <mx:AdvancedDataGridColumn headerText="列 1" dataField="col_a" itemEditor="renderer.TextRenderer"/>
  21.                 <mx:AdvancedDataGridColumn headerText="列 2" dataField="col_b" itemEditor="renderer.TextRenderer"/>
  22.                 <mx:AdvancedDataGridColumn headerText="列 3" dataField="col_c" itemEditor="renderer.TextRenderer"/>
  23.             </mx:columns>
  24.         </mx:AdvancedDataGrid>
  25.     </mx :P anel>
  26. </mx:Application>

TextRenderer.mxml

XML:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <mx:TextInput xmlns:mx="http://www.adobe.com/2006/mxml" keyDown="onKeydownHandler(event)">
  3. <mx:Script>
  4.     <![CDATA[
  5.         import mx.controls.AdvancedDataGrid;
  6.         import mx.controls.dataGridClasses.DataGridListData;
  7.                
  8.         private function onKeydownHandler(event:KeyboardEvent):void{
  9.             // -> http://livedocs.adobe.com/flex/3_jp/html/help.html?content=cellrenderer_4.html
  10.             var list_data:DataGridListData = DataGridListData(listData);
  11.             var list_owner:AdvancedDataGrid = AdvancedDataGrid(list_data.owner);
  12.             var row_index:Number =  list_data.rowIndex;
  13.             var column_index:Number = list_data.columnIndex;
  14.             var changed:Boolean = false; 
  15.             if(event.keyCode == Keyboard.LEFT){
  16.                 if(column_index> 0 ) {
  17.                     changed = true;
  18.                      column_index = column_index - 1;
  19.                  }
  20.         }else if(event.keyCode == Keyboard.DOWN){
  21.                 if(row_index <list_owner.dataProvider.length - 1 ) {
  22.                     changed = true;
  23.                     row_index = row_index + 1;
  24.                 }
  25.         }else if(event.keyCode == Keyboard.RIGHT){
  26.                 if(column_index <list_owner.columnCount - 1 ) {
  27.                     changed = true;
  28.                     column_index = column_index + 1;
  29.                 }
  30.             }else if(event.keyCode == Keyboard.UP){
  31.                 if(row_index> 0 ) {
  32.                     changed = true;
  33.                     row_index = row_index - 1;
  34.                 }
  35.             }
  36.             if(changed)list_owner.editedItemPosition = {rowIndex:row_index, columnIndex:column_index};
  37.         }   
  38.     ]]>
  39. </mx:Script>
  40. </mx:TextInput>

Comments:0

Comment Form
Remember personal info

Trackbacks:0

Trackback URL for this entry
http://parpue.net/web/492/trackback
Listed below are links to weblogs that reference
Flex AdvancedDataGrid 矢印キーでセル移動して編集 from parpue.net

Home > Flash | WEB > Flex AdvancedDataGrid 矢印キーでセル移動して編集

リンク
chocolataste-planner
millon

サーチ
Feeds
Meta
blog ranking ブログランキング・にほんブログ村へ
にほんブログ村 テクノラティのお気に入りに追加する

Return to page top