2012-09-13 58 views
0

我正在使用mx:DataGrid,我無法更改爲spark(這是一個傳統項目)。 DataGrid是可編輯的,當用戶進入最後一列時,我想添加一個新列並在新行的第一列中啓動編輯模式。我可以做這個。添加新行到mx DataGrid的問題

我的問題是,有時最後一列無法編輯,所以我添加了一個itemEditBeginning監聽器來停止編輯並添加新行。這是我的問題。當用戶進入最後一個字段時,新行被添加,但我看不到它。我必須單擊列標題才能對datagrid數據進行排序,然後出現新行。這有點遲緩。

我的代碼是大,但這個簡單的代碼能重現同樣的問題:

<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
      xmlns:s="library://ns.adobe.com/flex/spark" 
      xmlns:mx="library://ns.adobe.com/flex/mx" 
      creationComplete="application1_creationCompleteHandler(event)" 
      minWidth="955" minHeight="600"> 
    <fx:Script> 
    <![CDATA[ 
     import mx.collections.ArrayCollection; 
     import mx.events.CollectionEvent; 
     import mx.events.CollectionEventKind; 
     import mx.events.DataGridEvent; 
     import mx.events.FlexEvent; 

     [Bindable] public var itens:ArrayCollection; 

     protected function application1_creationCompleteHandler(event:FlexEvent):void { 
      itens = new ArrayCollection(); 
      itens.addEventListener(CollectionEvent.COLLECTION_CHANGE, onCollectionChange); 

      itens.addItem({a: '1', b: '2'}); 
     } 

     protected function onCollectionChange(event:CollectionEvent):void { 
      if (event.kind == CollectionEventKind.ADD) { 
       var row:int = itens.length - 1; 
       var column:int = 0; 
       var args:Array = [row, column]; 
       callLater(moveTo, args); 
      } 
     } 

     protected function moveTo(row:int, col:int):void { 
      itensDg.editedItemPosition = { rowIndex:row, columnIndex:col }; 
     } 

     protected function addInfo():void { 
      itens.addItem({a: '10', b: '20'}); 
     } 

     protected function itensDg_itemEditBeginningHandler(event:DataGridEvent):void { 
      if (event.columnIndex == 1) { 
       event.preventDefault(); 
       addInfo(); 
      } 
     } 

    ]]> 
    </fx:Script> 

    <mx:DataGrid id="itensDg" dataProvider="{itens}" editable="true" 
      itemEditBeginning="itensDg_itemEditBeginningHandler(event)" /> 
</s:Application> 

有關如何解決這個任何提示?

謝謝。

回答

0

崔西答案使我一個可行的解決方案。 DataGrid具有自己的itemEditBeginning監聽器,用於修改editedItemPosition。首先,我試圖阻止itemEditBeginning事件的傳播,但我意識到一些焦點和鼠標事件也會修改editItemPosition。所以,該項目被添加到數組中,我的onCollectionChange偵聽器被調用,但其他事件稍後修改了editedItemPosition。

所以,不是改變在CollectionEvent監聽器在editedItemPosition,我只是改變了它添加元素後:

protected function addInfo():void { 
    itens.addItem({a: '10', b: '20'}); 
    var row:int = itens.length - 1; 
    var column:int = 0; 
    var args:Array = [row, column]; 
    callLater(moveTo, args); 
} 
0

嘗試更新ADDINFO()如下:

protected function addInfo():void { 
     itens.addItem({a: '10', b: '20'}); 
     itens.refresh(); 
    } 
+0

崔西您好,感謝您的回答。刷新arrayCollection的作品:新項目不加延遲地添加。問題是,添加該行時,該列未打開進行編輯。 –