2010-09-13 2 views
2

У меня проблема с виджетами AdvancedDataGrid. Когда DataProvider является ArrayCollection (массивов), п-й массив (в коллекции) также п-й строки в сетке, и я могу прыгать и отображать I-й строки с помощью сценариевAdvancedDataGrid (группировка) быстрый переход к строке

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

сейчас, когда я добавляю Группировку, dataProvider оказывается GroupingCollection2, и теперь индекс в источнике датапаравидера больше не соответствует индексу в adg (что понятно, потому что оно сгруппировано).

Как я могу эффективно выбирать и отображать строку в сгруппированных данных? В настоящее время я должен пройти adg и сравнить каждый найденный элемент с его атрибутами данных, чтобы найти правильный индекс строки в adg и перейти к нему, как указано выше. Этот процесс происходит очень медленно. Есть предположения?

отредактировал позже: Мы уже использовали объект кеширования, как предлагает Шон, но он по-прежнему не компенсировал время поиска. Чтобы полностью построить сортировку списка вещей (к которому эта проблема приравнивается, поскольку список полностью переупорядочивается группировкой), вы всегда должны знать весь набор. В итоге мы не решили эту проблему. Проект завершен. Я соглашусь ответить Шон, если никто не знает лучшего пути через три дня.

ответ

0

В зависимости от того, какие значения, которые вы сравниваете с собой, можете хранить объекты в словаре с помощью поиска с использованием свойств/свойств, которые будут найдены, таким образом, у вас есть постоянный поиск времени для объекта (нет необходимости посмотрите на каждый элемент). Скажем, например, вы используете свойство с именем идентификатор на объект, то вы можете создать 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; 

теперь говорят типы пользователей в качестве идентификатора вы идете в объект idLookup при этом свойства идентификатора и получения объекта:

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

теперь, когда вы хотите получить объект по идентификатору вы можете просто сделать http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/controls/AdvancedDataGrid.html#expandItem() я не сделал какое-либо тщательное тестирования этого непосредствен, но использовать аналогичную концепцию для выполнения быстрого поиска окна для продвинутой фильтрации. Дайте мне знать, если это вообще поможет или идет в неправильном направлении. Кроме того, если вы можете уточнить немного больше с точки зрения того, какие типы/количество значений нужно искать, и если есть возможность для нескольких совпадений и т. Д., Я могу дать лучший ответ.

Успехов,

Shaun

+0

Это проблема для прокрутки ADG для выбора и отображения объекта пользователя. Подумайте буквально десятки тысяч строк, которые группируются в тысячи групп. Вы точно знаете идентификатор объекта, который вы ищете. Проблема заключается в том, что вы не знаете, в какой строке этот объект будет отображаться. Скажем, у нас есть два объекта: (38, Jane Doe) и (39, John Doe), и они сгруппированы в (0, The Does). Теперь у вас будут строки: [0] (0, The Does), [1] (38, Jane Doe), [2] (39, John Doe). Вам нужно будет перейти к строке 2 для отображения и выбрать Джона. Нет простого способа получить индекс Джона (39). –

+0

Чтобы уточнить, для того, чтобы построить этот объект, который вы предлагаете, мне было бы нужно смотреть на каждый объект в сетке, чтобы его построить, что занимает столько времени, что я задал этот вопрос в первую очередь (мы были кэшируя результаты, достигнутые нами путем перемещения списка только в таком объекте, клиент хотел бы перейти к строке объекта 100, которая была 6485-м объектом, поэтому мы знали бы 6485 строк в нашем кеше), но этого было недостаточно. –

Смежные вопросы