AdvancedDataGrid (группировка) быстрый переход к строке - PullRequest
2 голосов
/ 13 сентября 2010

У меня проблема с виджетом AdvancedDataGrid. Когда dataProvider является ArrayCollection (массивов), n-й массив (в коллекции) также является n-й строкой в ​​сетке, и я могу перейти и отобразить i-ю строку, написав сценарий

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

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

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

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

1 Ответ

0 голосов
/ 04 января 2011

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

теперь скажите, что пользователь вводит идентификатор, который вы вводите в объект 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

...