在ActionScript中刷新datagrid时保持选择

时间:2010-10-20 14:26:41

标签: flex actionscript-3 datagrid air

我正在使用flashbuilder开发我的第一个AIR应用程序 - 只是你知道。

我已将mx:DataGrid组件绑定到DataProvider,这是mx:HTTPService获取带有项目的xml文件。为了使数据保持数据,我在给定的时间间隔内轮询web服务。

我的问题是,在更新数据时,我丢失了DataGrid中当前选定的项目。我试图保存DataGrid.selectedIndex并设置数据何时更新,但我不确定何时这样做?!我最接近的是在触发DataGrid的updateComplete事件时恢复索引。这样做有效,但选择首先消失然后淡入 - 不会很快更新。

那么保持选择的最佳方法是什么? (一次只能选择一个项目)

作为一个附带问题:是否有一种方便的方法仅在实际更改时更新数据?

感谢任何建议!

2 个答案:

答案 0 :(得分:1)

我将从底部开始,仅在更改数据时更新数据的唯一方法是通过检查服务器端的数据以查看数据是否已更改并在实际更新之前进行调用。简而言之,您进行两次调用,一次是查看数据是否已更改,哪一次是服务器端查询,另一次调用返回true,这将更新数据。

或者,您也可以获取更新,并将其与您当前的数据进行比较,并且只有在数据不同的情况下才更新UI,但我觉得您的意思是前者只回答更新CALL,如果数据已经改变。

对于其他解决方案,在保存selectedIndex后,在updateComplete中执行此操作:

private function yourDataGridUpdateComplete(event:FlexEvent):void{ 
    yourDataGrid.selectedIndex = yourIndex;
    yourDataGrid.validateNow();
    yourDataGrid.scrollToIndex(yourIndex);
}

答案 1 :(得分:1)

DG使用数据项的UUID来确定刷新后是否仍应选择该项。如果数据项未实现IUID,则每次将它们添加到DG时,基本上都会创建随机值。

如果您的数据项实现IUID并且您使用一致的值(例如DB序列号),DG将“知道”刷新后,数据项与之前的数据项相同。