Flash Builder: элемент удаления сетки данных - индекс выходит за пределы

У меня есть проблема, которую я не могу решить в данный момент, небольшая помощь будет очень признательна. Локальный файл XML загружается в службу HTTP и загружает данные в DataGrid. Локальный файл содержит информацию о локально сохраненных файлах.

Просто чтобы быть уверенным и безопасным, когда приложение AIR загружается, я хочу запустить загруженную сетку данных и проверить, существует ли локальный файл. Если он не существует, я хочу удалить строку в сетке данных.

Делая это, я получаю эту досадную ошибку: Предоставленный индекс выходит за пределы.

Я знаю, что удаление элемента в сетке данных приведет к появлению новых индексов, которые вызывают эту ошибку.

Спасибо за совет!

public function checkiffileislocal(event:Event):void{

            var i:int;
            var count:Number = (dgUserRequest.dataProvider as ICollectionView).length;

            for (i=0;i < count;i++)
            {

                dgUserRequest.selectedIndex = i;
                if (File.applicationStorageDirectory.resolvePath(dgUserRequest.selectedItem.id).exists == false)
                {   
                    dgUserRequest.removeChildAt(dgUserRequest.selectedIndex);
                }

            }


        }

person webgeek    schedule 19.09.2013    source источник
comment
Обычно, когда вы перебираете что-то с целью удаления элементов, вы хотите сделать эту итерацию в обратном порядке. В противном случае код цикла может привести к возникновению подобных ошибок. С учетом сказанного, ответ ниже также уместен. Удалять элементы из dataProvider (вместо удаления дочерних объектов). Если вы хотите отключить строки, вы можете добавить свойство isDisabled к каждому элементу, чтобы средство визуализации элементов могло использовать его для отображения строки в отключенном состоянии.   -  person Sunil D.    schedule 19.09.2013


Ответы (1)


Мне кажется, вы хотите удалить элемент из dataProvider; не является визуальным потомком DataGrid.

Строки DataGrid не являются его дочерними элементами.

Строки/столбцы создаются автоматически на основе количества элементов в dataProvider. Вы не должны пытаться напрямую манипулировать объектами строк/столбцов.

person JeffryHouser    schedule 19.09.2013
comment
Спасибо за ваш отзыв. Отключение строки также является опцией. Любой способ сделать это? - person webgeek; 19.09.2013
comment
@webgeek Я думаю, вам нужно прочитать о переработке рендерера. Предполагая, что ваша сетка имеет полосы прокрутки; нет никакого способа гарантировать, что определенная строка будет отображать только определенный набор данных. Я не могу представить вариант использования, в котором имеет смысл отключить строку с учетом этих ограничений. Потому что, когда пользователь прокручивает эту строку, будут отображаться разные данные. Интересно, нужен ли вам пользовательский itemRenderer, который отключит ячейку на основе данных. Таким образом, когда пользователь прокручивает сетку, ячейка останется отключенной. - person JeffryHouser; 19.09.2013