将焦点从DataGrid itemRenderer中的一个itemRenderer移动到另一个itemRenderer

时间:2012-08-17 16:21:35

标签: actionscript-3 flex flex4 flex3 flex4.5

我有一个带有4列的mx:DataGrid,其中itemRenderer具有以下设置:

的Mx:数据网格:

<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键并且必须将焦点移动到同一行中的另一列。 我正在做的方式是转到下面的专栏。

移至右栏的最佳方法是什么?

谢谢

1 个答案:

答案 0 :(得分:0)

请注意,在编辑行时,DataGrid具有以下功能:

  • 输入接受编辑并将焦点移至下一行(如果editorUsesEnterKey为真)
  • TAB SHIFT - TAB 接受编辑并将焦点移至下一个/上一个列
  • ESC CTRL - 取消编辑,使焦点保持原位

您可以使用DataGridColumn的{​​{3}}属性禁用 Enter 键功能。

<mx:DataGridColumn editorUsesEnterKey="false" />

更改行为以使ENTER将焦点向右/向左移动有点毛茸茸。键击处理在下面的私有方法中完成。此侦听器已添加到DataGrid的公共方法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);
        }
    }