1

我使用了一个临时数组来填充 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();
4

2 回答 2

2

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

如果您真的想访问源而不是处理集合,那么这取决于您使用的 ListCollectionView 的类型。

如果您使用的是 ArrayCollection,则可以使用source 属性访问源。如果您使用的是 XMLListCollection,则可以使用source 属性访问源。

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

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

于 2012-08-01T00:57:21.923 回答
0

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

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

于 2012-08-01T01:44:42.613 回答