Flex / AS3:从ListCollectionView中删除项目

时间:2012-08-01 00:46:45

标签: actionscript-3 flex

我使用临时数组来填充ListCollectionView。稍后,我有一个屏幕,使用ListCollectionView作为dataProvider显示DataGrid。用户可以通过选择行然后单击“删除”按钮来删除DataGrid中的行。

如何访问ListCollectionView使用的原始源,并从那里删除该项?

执行此操作后,该项目是否也会自动从ListCollectionView中删除,并且不再显示在DataGrid中(或者是否需要刷新某些内容)?

更新1

以下听起来好像我在正确的轨道上? (我想从ListCollectionView的源(是“.list”?)中删除它,而不仅仅是从ListCollectionView中删除它。)

[Bindable] private var _myLCV:ListCollectionView=new ListCollectionView(new ArrayList());
...
var obj:Object = _myLCV.getItemAt(myGrid.grid.selectedIndex); // get item user selected
_myLCV.list.removeItemAt( _myLCV.list.getItemIndex(obj) );   // delete item from source

更新2

我不确定为什么(我正在使用SDK 4.5.1A),但我似乎需要在UPDATE 1中将以下代码行添加到上面的代码中,以便DataGrid可靠地更新并显示已删除的代码行:

_myLCV.refresh();

2 个答案:

答案 0 :(得分:2)

我的冲动是建议使用removeItemAt从ListCollectionView中删除项目。

如果你真的想要访问源而不是处理集合,那么它取决于你正在使用的ListCollectionView的类型。

如果您正在使用ArrayCollection,则可以使用source property访问源代码。 如果您使用的是XMLListCollection,则可以使用source property

访问源代码

ListCollectionView中没有固有的source属性,但List property可能就足够了。

在任何情况下,从ListCollectionView或ListCollectionView的源中删除项应该会自动更新DataGrid。如果没有,您可以在集合上调用refresh() method

答案 1 :(得分:0)

与其他列表基本控件(如List甚至DataGroup)一样,Spark DataGrid会从其dataProvider中观察更改事件。更改事件可能包括项目删除,更新,排序和插入。这提供了通过更新其基础数据来更新控件的便利。

也就是说,如果您的目的是“刷新”数据网格以使其与LIstCollectionView保持同步,则通过修改数组然后刷新将不再必要。