2012-08-17 47 views
0

我有一個MX:數據網格與4列,其具有的itemRenderer使用以下設置:將焦點從一個到另一個的itemRenderer內部數據網格的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> 

對電網的線用戶點擊nd點擊列進行編輯。 在他更改或增加值後,按下ENTER鍵,必須將焦點移動到同一行中的另一列。 我正在做的方式正在轉移到下面的專欄。

移動到右欄的最佳方法是什麼?

謝謝

回答

0

注意的DataGrid具有以下功能時,編輯行:

  • 輸入接受編輯和焦點移動到下一行(如果editorUsesEnterKey爲true)
  • TABSHIFT - TAB接受編輯並將焦點移到下一個/ pr上一列
  • ESCCTRL - 取消編輯留下焦點到位

您可以禁用DataGridColumneditorUsesEnterKey屬性中輸入關鍵功能。

<mx:DataGridColumn editorUsesEnterKey="false" /> 

改變行爲,使ENTER焦點移動到左/右有點毛。關鍵筆劃處理在下面的私有方法中完成。該收聽者在DataGrid的公共方法createItemEditor()中添加並在destroyItemEditor()中刪除。理論上,你可以重寫這些方法來改變這種行爲。

來源MX :: DataGrid中(注意Tab鍵是在重點變化處理程序處理)

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); 
     } 
    } 
+0

它的工作部分。添加了editorUsesEnterKey =「true」,並在itemEditEnd中執行此操作: itensPedidoCompraList.editedItemPosition = {columnIndex:event.columnIndex + 1,rowIndex:0}; 我itemRenderer有一個組件,NumberInput擴展TextInput,當我編輯了ItemPosition時,他將焦點從DataGrid中引出。焦點只會在列而不是itemRenderer時出現。 – 2012-08-17 19:46:40

+0

PS:或者只是依靠「TAB」鍵水平移動焦點的事實。這實際上是非常標準的行爲。你可以告訴你的客戶端網格的行爲如同Excel:當你按下Enter鍵時,它向下移動一行:) – 2012-08-17 23:26:37

+0

我明白了。但要求並使用Enter鍵。 即使Tab鍵也不會移動到下一個itemRenderer並且不顯示焦點。所以移動到另一個具有TextInput的itemRenderer。 我猜這是與我的自定義組件擴展TextInput相關的東西。如果您使用TextInput正常工作。 – 2012-08-20 11:46:32

相關問題