如何获取flex中是否修改了AdvancedDatagrid数据?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何获取flex中是否修改了AdvancedDatagrid数据?相关的知识,希望对你有一定的参考价值。

我有一个高级的数据网格,其中包含许多行和列(可编辑)。我只想在网格中进行任何更改时才从网格保存数据。不使用布尔变量怎么办?是否有任何内置函数,例如:如'datagridId.isModified'

答案

就像一个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文档:

<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通过其changes集合在内部跟踪所有更改的项目。 http://flexicious.com/Home/Ultimate(更改跟踪API)示例

另一答案

这里是知道数据确实已更改的方法:

<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>

以上是关于如何获取flex中是否修改了AdvancedDatagrid数据?的主要内容,如果未能解决你的问题,请参考以下文章

flex4 如何给整个页面添加滚动条?

如何将信息从 PHP 代理推送到 Flex 应用程序

如何在 Flex 中获取自定义组件的句柄?

在flex中,如何获取组件的全局坐标位置?

Flex 3:如何在其 ItemRenderer 中获取 DataGridColumn 的 dataField?

从字符串中获取 Flex 中的部分 URL