2010-09-24 97 views
0

我使用setInterval每5秒輪詢一次RemoteObject,並將返回的結果(Array)作爲DataProvider輸入DataGrid。但每次發生這種情況時,所選行將在DataGrid刷新時取消選擇。所以我想在DataGrid更新時重新選擇這個項目。Flex 4:無法預先選擇DataGrid中的項目(Array)

到目前爲止,我已經嘗試捕捉選定行使用被稱爲前的RemoteObject:

private function refreshDataGrid(e:ResultEvent):void 
{ 
    var selectedRow:Object = myDataGrid.selectedItem; 
    myDataGrid.dataProvider = e.result as Array; 
    myDataGrid.selectedItem = selectedRow; 
} 

然而,這是行不通的。如果我選擇該行,然後執行「trace(myDataGrid.selectedItem)」,則控制檯中的結果爲空。

在另一個嘗試我想:

private function refreshDataGrid(e:ResultEvent):void 
{ 
    var selectedItem:* = myDataGrid.selectedItem.itemId; 
    myDataGrid.dataProvider = e.result as Array; 
    myDataGrid.selectedItem.itemId = selectedItem; 
} 

這也不起作用。

任何人都可以幫我做這個工作嗎?任何幫助將不勝感激。提前致謝。

回答

2

它看起來像你的對象上有一個獨特的itemId屬性。第二次嘗試的問題是,它試圖在當前選擇的項目上設置itemId,而不是將當前選擇的項目更改爲具有該itemId的項目。我會更改第二個版本以循環訪問dataProvider並找到具有指定itemId的項目,然後將該項目設置爲選定項目。事情是這樣的:這樣做的

private function refreshDataGrid(e:ResultEvent):void 
{ 
    var selectedItem:* = myDataGrid.selectedItem.itemId; 
    myDataGrid.dataProvider = e.result as Array; 

    for (var i:int = 0; i < myDataGrid.dataProvider.length; i++) { 
     if (myDataGrid.dataProvider[i].itemId == selectedItem) { 
      myDataGrid.selectedItem = myDataGrid.dataProvider[i]; 
      break; 
     } 
    } 
} 
+0

這是最容易實現,效果很好。謝謝。 – Reado 2010-11-03 09:17:38

2

更好的辦法是讓你的對象實現IUID接口,這是什麼的Flex列表控件的使用,以確定對象是否匹配。

如果最近一次投票的項目與舊投票項目具有相同的IUID,它仍將被選中。 http://livedocs.adobe.com/flex/3/html/help.html?content=about_dataproviders_8.html

+0

我給你+1,因爲這是一個很好的答案,我會在不久的將來考慮構建應用程序。謝謝。 – Reado 2010-11-03 09:18:45