0

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

Mx:数据网格:

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

Mx:数据网格列:

<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接受编辑并将焦点移至下一行(如果editorUsesEnterKey为真)
  • TABSHIFT-TAB接受编辑并将焦点移至下一列/上一列
  • ESCCTRL-.取消编辑,保留焦点

您可以使用 的editorUsesEnterKey属性禁用Enter键功能。DataGridColumn

<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);
        }
    }
于 2012-08-17T16:51:54.573 回答