我有一个包含许多行和列(可编辑)的高级数据网格。仅当网格中有任何更改时,我才想保存网格中的数据。不使用布尔变量如何做到这一点?是否有任何内置功能,例如:像'datagridId.isModified'。
			
			1327 次
		
2 回答
            0        
        
		
仅供参考 - 上面的代码将在所有场景中触发 - 数据提供者刷新、排序等。有一个集合事件类型会限制它何时调度
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 文档:
<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)示例
于 2013-01-24T22:06:29.113   回答
    
    
            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>
    于 2013-01-24T06:32:09.207   回答