2010-10-20 42 views
2

我正在使用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); 
} 
+0

我已經有yourDataGrid.selectedIndex = yourIndex;在我的updateComplete()。添加validateNow和scrollToIndex沒有任何區別 - 所選項目仍然閃爍。感謝您的努力! – 2010-10-21 06:31:18

+0

嗯,這很尷尬..我以正確的方式更新了索引,我沒有在我的Datagrid上設置selectionDuration =「0」,因此閃爍。 – 2010-11-08 15:32:25

1

的DG使用數據項的UUID,以確定是否該項目後應仍處於選中狀態刷新。如果數據項不執行IUID,則它們基本上會在每次將其添加到DG時創建隨機值。

如果您的數據項實現了IUID並且使用了一致的值(例如DB序列號),那麼DG將會「知道」刷新後數據項與以前一樣。

+0

好的,當我有機會的時候會試試看!日Thnx – 2010-10-26 10:33:13

相關問題