Apache flex 在ActionScript中刷新datagrid时保留选择
我正在用flashbuilder开发我的第一个AIR应用程序——正如您所知 我已经将一个Apache flex 在ActionScript中刷新datagrid时保留选择,apache-flex,actionscript-3,datagrid,air,Apache Flex,Actionscript 3,Datagrid,Air,我正在用flashbuilder开发我的第一个AIR应用程序——正如您所知 我已经将一个mx:DataGrid组件绑定到一个DataProvider,后者是一个mx:HTTPService获取包含项的xml文件。为了使数据保持最新,我在给定的时间间隔内轮询Web服务 我的问题是,当数据更新时,我在DataGrid中丢失了当前选定的项。我已尝试保存数据网格。选择了索引并在数据更新时进行设置,但我不确定何时执行此操作?!我最接近的方法是在触发DataGrid的updateComplete事件时恢复索
mx:DataGrid
组件绑定到一个DataProvider
,后者是一个mx:HTTPService
获取包含项的xml文件。为了使数据保持最新,我在给定的时间间隔内轮询Web服务
我的问题是,当数据更新时,我在DataGrid中丢失了当前选定的项。我已尝试保存数据网格。选择了索引并在数据更新时进行设置,但我不确定何时执行此操作?!我最接近的方法是在触发DataGrid的updateComplete
事件时恢复索引。这是可行的,但选择先淡出,然后淡入-更新不够快
那么,保持选择的最佳方式是什么?(一次只能选择一个项目)
还有一个附带的问题:是否有一种方便的方法只在数据发生实际变化时才更新数据
谢谢你的建议 我将从底部开始,只有在数据发生更改时才更新数据的唯一方法是通过服务器端的数据检查,查看数据是否已更改,并在实际更新之前进行调用。简而言之,您要进行两次调用,一次是查看数据是否已更改,这是一个服务器端查询,另一次是仅当返回true时,才进行更新数据
或者,您也可以获取更新,并将其与当前数据进行比较,并且仅在数据不同时更新UI,但我感觉您指的是以前的答案,即如果数据发生更改,则只执行更新调用
对于另一种解决方案,保存selectedIndex后,请在updateComplete中执行以下操作:
private function yourDataGridUpdateComplete(event:FlexEvent):void{
yourDataGrid.selectedIndex = yourIndex;
yourDataGrid.validateNow();
yourDataGrid.scrollToIndex(yourIndex);
}
DG使用数据项的UUID来确定刷新后是否仍应选择该项。如果数据项没有实现,则每次将其添加到DG时,基本上都会创建随机值
如果您的数据项实现了IUID,并且您使用了一致的值(例如DB序列号),则DG将“知道”刷新后,数据项与之前相同。我已经有了yourDataGrid.selectedIndex=yourIndex;在我的updateComplete()中。添加validateNow和scrollToIndex没有任何区别-所选项目仍然闪烁。谢谢你的努力!嗯,这太尴尬了。。我以正确的方式更新了索引,只是没有在数据网格上设置selectionDuration=“0”,因此出现了闪烁。