2011-08-09 60 views
1

當我更新dataProvider(ArrayCollection)時,我的Flex數據網格自動彈出滾動到頂部。我不希望發生這種情況,但我仍然想要所有的對象更新。我正在爲客戶的管理系統開發一個半實時的儀表板,並經常更新。如果它每次更新都滾動到頂部,則使用起來會非常困難和令人沮喪。Flex DataGrid在dataProvider上自動滾動更改

我試圖使用以下技術來防止這種情況,沒有工作。

dataProvider = updatedDataProvider; 
dataProvider.updateItem(dataProvider); 

dataProvider.source = updatedDataProvider.source; 
dataProvider.updateItem(dataProvider); 

我打算派一個鼠標事件舉行的地方垂直滾動條,我試圖鎖定到位(保存和重新分配)垂直滾動條位置值...

而且許多其他人,這些只是我腦海中的第一批。有人有主意嗎?

+0

您是使用Spark還是MX DataGrid?如果你替換dataProvider;那麼這是預期的,因爲Flex「銷燬」顯示的所有內容並重新創建它。但是,如果您只是將新項目添加到現有的ArrayCollection上,則應保留所選項目/滾動位置。 – JeffryHouser

+0

@ www.Flextras - MX。 Flex 3中的標籤。我瞭解網格的基本操作。我希望它以不同的方式工作。你是否推薦我.removeAll()然後添加每個項目? –

+1

我並不是說要全部刪除。只需將您的新項目添加到dataProvider或替換那些需要更新的項目。 DataGrid的集合更改處理程序應更新網格,同時保持滾動位置(我相信selectedItems)。但是,如果您正在更新/替換dataProvider中的所有項目;那麼最好的辦法是在替換之前存儲滾動位置,然後在替換之後進行設置。雖然我認爲這會導致奇怪的用戶體驗。 – JeffryHouser

回答

2

已經在How do I maintain selection in a DataGrid when the data changes?回答,請檢查它。

基於該答案構建,如果索引在數據提供者之間改變,即如果上面插入了一行,則可能需要在新提供者上執行getItemIndex。

+0

如果問題是重複的,投票結束這個問題被認爲是一個確切的重複是適當的。我同意這兩個問題非常相似。並繼續並投票結束。你應該這樣做。 – JeffryHouser

+0

謝謝Flextras,我想,但我對聲望投下了近距離投票。 http://stackoverflow.com/privileges/close-questions – SuperSaiyen

+0

哦,對不起。 ;)我給了你一個幫助你走上梯子的途徑。 :-) – JeffryHouser

-1

如果您選擇之前選擇的內容並使用ensureIndexIsVisible(),該怎麼辦?

+0

flex3標籤就在那裏。 –