2010-09-13 76 views
2

我有AdvancedDataGrid小部件的問題。當dataProvider是一個ArrayCollection(陣列),第n個陣列(集合中)也是網格內的第n行,我可以跳躍,現在由腳本AdvancedDataGrid(分組)快速跳轉到行

adg.selectedIndex = i; 
adg.scrollToIndex(i); 

顯示第i行,當我添加分組時,dataProvider最終成爲GroupingCollection2,現在數據提供者的源中的索引不再對應adg中的索引(這是可以理解的,因爲它已被分組)。

如何有效地選擇和顯示分組數據中的一行?目前,我必須遍歷adg,並將每個找到的項目與其數據屬性進行比較,以便在adg中找到正確的行索引,並像上面一樣跳轉到它。這個過程非常緩慢。有什麼想法嗎?

以後編輯: Shaun表示,我們已經使用了緩存對象,但它仍然沒有補償搜索時間。爲了完全構建一個事物列表的排序(這個問題等同於列表完全由分組重新排序),您總是必須知道整個集合。最後我們沒有解決這個問題。該項目現在結束。如果沒有人在三天內知道更好的方法,我會接受肖恩的答案。

回答

0

根據你的比較結果,你可以使用要搜索的屬性/屬性將對象存儲在字典中,這樣你就可以持續查找對象(不需要看每一個項目)。例如說你使用一個稱爲id的對象屬性,那麼你可以創建一個AS對象像

var idLookup:Object = {}; 
for(myObject in objects) 
    idLookup[myObject.id] = myObject; 

//Say you want multiple properties 
//idLookup[myObject.id]={}; 
//idLookup[myObject.id][myObject.otherProp] = myObject; 

說現在在一個ID的用戶類型,你進入那個id屬性的idLookup對象和檢索對象:

var myObject:Object = idLookup [userInput.text]; myAdg.expandItem(myObject,true);

現在,當你想通過ID的對象,你可以只是做 http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/controls/AdvancedDataGrid.html#expandItem() 我沒有做過這樣的任何徹底的測試,直接,而是使用類似的概念做快看起坐先進的過濾。讓我知道這是否有所幫助,或者走向了錯誤的方向。此外,如果你可以澄清一點,你需要查找什麼類型/數量的值,以及是否有可能進行多次比賽等。我可能會提供更好的答案。

祝你好運,

肖恩

+0

這是滾動ADG選擇和顯示對象給用戶的問題。從字面上看,數以萬計的行被分組爲數千個組。你知道你所尋找的對象的ID很好。 問題是你不知道該對象最後顯示哪一行。說,我們有兩個對象, (38,Jane Doe)和 (39,John Doe), ,它們被分組爲(0,The Does)。你現在有行: [0](0,The Does), [1](38,Jane Doe), [2](39,John Doe)。 您需要跳到第2行以顯示並選擇John。從約翰的指數(39)中找不到簡單的方法。 – 2011-01-11 00:46:31

+0

爲了進一步闡明,爲了構建你提出的那個對象,我仍然需要查看網格中的每一個對象來構建它,這需要很多時間,所以我首先問了這個問題(我們是通過在這樣一個對象中遍歷列表來緩存我們獲得的結果;客戶希望跳轉到第6485個對象的對象行100,所以我們知道緩存中有6485行),但這並不足夠。 – 2011-01-11 02:37:01