0

次の設定のitemRendererを持つ4つの列を持つmx:DataGridがあります。

Mx:DataGrid:

<mx:DataGrid id="itensPedidoCompraList"
             width="100%"
             height="120"    
             dataProvider="{ model.pedidoCompra.itens }"
             editable="true"
             itemEditEnd="itensPedidoCompraList_itemEditEndHandler(event)">

Mx:DataGridColumn:

<mx:DataGridColumn headerText="{resourceManager.getString('cadastroPedidoCompra', 'ident.PercentualDesconto') }"
               width="60"
               textAlign="right"
               rendererIsEditor="true"
               editorDataField="data">
  <mx:itemRenderer>
             <fx:Component>
                   <mx:Canvas>
                         <input:NumberInput width="55"   number="@{data.percentualDesconto }"/>
                   </mx:Canvas>
        </fx:Component>
  </mx:itemRenderer>

ユーザーはグリッドの線をクリックし、列をクリックして編集します。彼が値を変更または追加した後、Enterキーを押して、同じ行の別の列にフォーカスを移動する必要があります。私のやり方は、下の列に移動しています。

正しい列に移動するための最良の方法は何ですか?

ありがとうございました

4

1 に答える 1

0

行を編集するとき、DataGrid には次の機能があることに注意してください。

  • Enter編集を受け入れ、次の行にフォーカスを移動します ( editorUsesEnterKeytrue の場合)
  • TABまたはSHIFT-TAB編集を受け入れ、フォーカスを次/前の列に移動します
  • ESCまたはCTRL-.フォーカスを残したまま編集をキャンセルします

のeditorUsesEnterKeyプロパティを使用してEnterキー機能を無効にすることができます。DataGridColumn

<mx:DataGridColumn editorUsesEnterKey="false" />

ENTERフォーカスを左右に移動するように動作を変更するのは少し面倒です。キーストロークの処理は、以下のプライベート メソッドで行われます。このリスナーはDataGridの public メソッドcreateItemEditor()に追加され、 で削除されdestroyItemEditor()ます。理論的には、これらのメソッドをオーバーライドして、この動作を変更できます。

ソース mx::DataGrid (タブ移動はキー フォーカス変更ハンドラで処理されることに注意してください)

 private function editorKeyDownHandler(event:KeyboardEvent):void
    {
        // ESC just kills the editor, no new data
        if (event.keyCode == Keyboard.ESCAPE)
        {
            endEdit(DataGridEventReason.CANCELLED);
        }
        else if (event.ctrlKey && event.charCode == 46)
        {   // Check for Ctrl-.
            endEdit(DataGridEventReason.CANCELLED);
        }
        else if (event.charCode == Keyboard.ENTER && event.keyCode != 229)
        {
            // multiline editors can take the enter key.
            if (!_editedItemPosition)
                return;

            if (columns[_editedItemPosition.columnIndex].editorUsesEnterKey)
                return;

            // Enter edits the item, moves down a row
            // The 229 keyCode is for IME compatability. When entering an IME expression,
            // the enter key is down, but the keyCode is 229 instead of the enter key code.
            // Thanks to Yukari for this little trick...
            if (endEdit(DataGridEventReason.NEW_ROW) && !dontEdit)
                findNextEnterItemRenderer(event);
        }
    }
于 2012-08-17T16:51:54.573 に答える