mx:DataGrid を使用していますが、spark に変更できません (レガシー プロジェクトです)。DataGrid は編集可能で、ユーザーが最後の列に入ったら、新しい列を追加して、新しい行の最初の列で編集モードを開始します。私がすることができます。
私の問題は、最後の列を編集できないことがあるため、 itemEditBeginning リスナーを追加して編集を停止し、新しい行を追加することです。それが私の問題です。ユーザーが最後のフィールドに入ると、新しい行が追加されますが、表示されません。列ヘッダーをクリックしてデータグリッド データを並べ替えると、新しい行が表示されます。それは一種の遅れです。
私のコードはより大きくなりますが、この単純なコードは同じ問題を再現できます:
<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>
これを解決する方法についてのヒントはありますか?
ありがとう。