在 ActionScript 中刷新数据网格时保持选择
Posted
技术标签:
【中文标题】在 ActionScript 中刷新数据网格时保持选择【英文标题】:Keep selection when refreshing datagrid in ActionScript 【发布时间】:2011-04-28 02:13:43 【问题描述】:我正在使用 flashbuilder 开发我的第一个 AIR 应用程序 - 你知道吗。
我已经将mx:DataGrid
组件绑定到DataProvider
,这是一个mx:HTTPService
获取带有项目的xml 文件。为了使数据保持最新状态,我在给定的时间间隔内轮询 Web 服务。
我的问题是,当数据更新时,我丢失了 DataGrid 中当前选定的项目。我尝试保存DataGrid.selectedIndex
并设置数据更新时间,但我不确定何时执行?!我最接近的是在触发 DataGrid 的updateComplete
事件时恢复索引。这行得通,但选择首先消失然后淡入 - 更新不够快。
那么保持选择的最佳方式是什么? (一次只能选择一项)
还有一个附带问题:有没有一种方便的方法可以仅在数据实际发生变化时更新数据?
感谢您的任何建议!
【问题讨论】:
【参考方案1】:我将从底部开始,仅在数据发生更改时才更新数据的唯一方法是检查服务器端的数据以查看数据是否已更改并在实际更新之前进行调用.所以简而言之,您进行两次调用,一次是查看数据是否已更改,这是一个服务器端查询,而下一次仅当返回 true 时才会更新数据。
或者,您也可以获取更新,并将其与您当前的数据进行比较,并且仅在该数据不同时才更新 UI,但我感觉您的意思是以前的答案是根本只进行更新 CALL,如果数据发生了变化。
至于其他解决方案,在保存 selectedIndex 后,在 updateComplete 中执行此操作:
private function yourDataGridUpdateComplete(event:FlexEvent):void
yourDataGrid.selectedIndex = yourIndex;
yourDataGrid.validateNow();
yourDataGrid.scrollToIndex(yourIndex);
【讨论】:
我已经有了 yourDataGrid.selectedIndex = yourIndex;在我的 updateComplete() 中。添加 validateNow 和 scrollToIndex 没有任何区别 - 所选项目仍然闪烁。不过感谢您的努力! 嗯,这很尴尬.. 我已经以正确的方式更新了索引,我只是没有在我的 Datagrid 上设置 selectionDuration="0",因此闪烁。【参考方案2】:DG 使用数据项的 UUID 来确定刷新后是否仍应选择该项。如果数据项没有实现IUID,它们基本上会在每次添加到 DG 时创建随机值。
如果您的数据项实现 IUID 并且您使用一致的值(例如 DB 序列号),则 DG 将“知道”在刷新后,数据项与以前相同。
【讨论】:
以上是关于在 ActionScript 中刷新数据网格时保持选择的主要内容,如果未能解决你的问题,请参考以下文章
ActionScript 3:在 Flash embed 中失去焦点时保持 textarea UIscrollbar 位置