我有一个包含许多行和列的高级数据网格(可编辑)。我想仅在网格中进行任何更改时才从网格中保存数据。如何在不使用布尔变量的情况下完成此操作?是否有任何内置函数,例如:像'datagridId.isModified'。
先谢谢。
答案 0 :(得分:0)
以下是了解数据真正发生变化的方法:
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()">
<mx:AdvancedDataGrid id="myGrid"
dataProvider="{dataCollection}"
width="200" height="100%" editable="true">
<mx:groupedColumns>
<mx:AdvancedDataGridColumn dataField="name"/>
<mx:AdvancedDataGridColumn dataField="score"/>
</mx:groupedColumns>
</mx:AdvancedDataGrid>
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.events.CollectionEvent;
[Bindable]
private var dataCollection:ArrayCollection = new ArrayCollection([
{name:"Name1", score:0},
{name:"Name2", score:10},
]);
private function init():void
{
myGrid.dataProvider.addEventListener(CollectionEvent.COLLECTION_CHANGE, saveData);
}
private function saveData(event:CollectionEvent):void
{
//your saving code
trace("saving");
}
]]>
</mx:Script>
</mx:Application>
答案 1 :(得分:0)
就像一个FYI - 上面的代码将在所有场景中触发 - 数据提供者刷新,排序等。有一个集合事件类型将限制它何时发送
dataGrid.dataProvider.addEventListener(CollectionEvent.COLLECTION_CHANGE, function(e:CollectionEvent) {
if(e.kind == CollectionEventKind.UPDATE){
//this means something changed. event.items will tell you what changed.
}
}
=====
另一种方法是使用itemEditEnd事件。 来自adobe docs:
<mx:AdvancedDataGrid id="myGrid"
itemEditEnd="onItemEditEnd(event);" >
private function onItemEditEnd(event:DataGridEvent):void {
var myEditor:TextInput =
TextInput(event.currentTarget.itemEditorInstance);
var newVal:String = myEditor.text;
var oldVal:String = event.currentTarget.editedItemRenderer.data[event.dataField];
}
===
最后,插件:我们的Ultimate DataGrid通过其更改集合在内部跟踪所有更改的项目。 http://flexicious.com/Home/Ultimate(更改跟踪API)考试