Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flex 如何获取advanceddatagrid数据是否在flex中修改?_Apache Flex_Datagrid_Advanceddatagrid - Fatal编程技术网

Apache flex 如何获取advanceddatagrid数据是否在flex中修改?

Apache flex 如何获取advanceddatagrid数据是否在flex中修改?,apache-flex,datagrid,advanceddatagrid,Apache Flex,Datagrid,Advanceddatagrid,我有一个具有许多行和列的高级数据网格。我只想在网格中有任何更改时保存网格中的数据。如何在不使用布尔变量的情况下做到这一点?是否有诸如“datagridId.isModified”之类的内置函数。以下是了解数据确实发生了更改的方法: <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()"> <mx:AdvancedDataGr

我有一个具有许多行和列的高级数据网格。我只想在网格中有任何更改时保存网格中的数据。如何在不使用布尔变量的情况下做到这一点?是否有诸如“datagridId.isModified”之类的内置函数。

以下是了解数据确实发生了更改的方法:

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

仅供参考-上述代码将在所有情况下触发-数据提供程序刷新、排序等。有一种收集事件类型将限制其发送的时间

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];  
            }   
===


最后,一个插件:我们的终极DataGrid通过其changes集合在内部跟踪所有更改的项。更改跟踪API示例

谢谢Serge他。我应该把这个放在哪里?在保存功能或其他地方?我知道您希望在数据更改后立即保存数据。所以,当然,您需要在设置DataGrid的dataProvider之后添加这个处理程序,并从这里调用save,这就是我的网格的dataProvider设置的地方。我如何使用我文件中提到的上面的代码@Serge Him。我画了完整的例子,是你想要的吗?谢谢@Serge。无论如何,我会试试这个。谢谢flexicious.com。但是上面的代码只适用于文本输入数据。但我的网格中有日期控件,我的网格中有文本输入、日期选择器、组合等。