2012-08-01 25 views
1

我用一個臨時數組來填充一個ListCollectionView。後來,我有一個屏幕顯示一個DataGrid使用ListCollectionView作爲dataProvider。用戶可以通過選擇行然後單擊刪除按鈕來刪除DataGrid中的一行。Flex/AS3:從ListCollectionView刪除項目

如何訪問ListCollectionView使用的原始源,並從那裏刪除項目?

我這樣做後,該項目是否也會從ListCollectionView自動刪除,並不再顯示在DataGrid中(或需要刷新的東西)?

UPDATE 1

以下聽起來像是我在正確的軌道上嗎? (我想從源(刪除那就是在ListCollectionView的,不只是從的ListCollectionView的「.LIST」?)。)

[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

我不知道爲什麼(我「M使用SDK 4.5.1A),但我似乎需要下面的代碼行添加到上面的代碼更新1,爲DataGrid可靠地更新,並顯示已刪除行:

_myLCV.refresh(); 

回答

2

我的衝動建議使用removeItemAt刪除ListCollectionView中的項目。

如果您真的想訪問源代碼而不是處理集合,那麼它取決於您使用的是什麼類型的ListCollectionView。

如果您使用ArrayCollection,則可以使用source property訪問源。 如果您使用XMLListCollection,則可以使用source property訪問源。

ListCollectionView中沒有固有的源屬性,但List property就足夠了。

在任何情況下,從ListCollectionView或ListCollectionView的源中刪除項目應自動更新DataGrid。如果不是,您可以致電集合上的refresh() method

0

Spark DataGrid與其他列表基本控件(如List或DataGroup)一樣,將從其dataProvider中觀察更改事件。更改事件可能包括項目刪除,更新,排序和插入。這通過更新其基礎數據提供了更新控制的便利。這就是說,如果你的目的是「刷新」數據網格以保持與LIstCollectionView的最新狀態,那麼通過修改數組然後刷新就不必要了。

+0

在實踐中(使用我的UPDATE1代碼上面),我觀察DataGrid間歇性地仍然顯示刪除的項目。在這些情況下,我可以再次選擇該項並嘗試第二次刪除它,然後Flash Builder崩潰,因爲它試圖訪問索引值爲-1(RangeError:Index'-1'指定超出範圍。 ')。任何想法爲什麼會發生? – ggkmath 2012-08-01 01:48:35