我正在使用mx:DataGrid,我无法改变为spark(这是一个遗留项目)。 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 :(得分:0)
尝试按如下方式更新addInfo():
protected function addInfo():void {
itens.addItem({a: '10', b: '20'});
itens.refresh();
}
答案 1 :(得分:0)
Trish的回答让我找到了一个有效的解决方案。 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);
}