2010-02-22 5 views
3

Я работаю над приложением, используя Flex, Adobe Air. У меня есть DataGrid с XML как мой DataProvider. Во время выполнения программы мой XML обновляется. После обновления и сохранения XML мой DataGrid также должен получить обновление. Я использовал метод Dataprovidername.refresh(), но он не работает.Обновление DataGrid при обновлении DataProvider

+6

Вы сказали, что решили проблему, но не указали, как это сделать. добавьте свое решение в качестве ответа для людей, которые смотрят в будущем. – geowa4

ответ

1

ли вы сделать XML-переменной Bindable ?:

[Bindable] 
private var data:XML... 
+0

Да, я сделал свой XMLListCollection Bindable ... –

5

после обновления данных, попробуйте диспетчерское событие изменения коллекции вручную:

datagrid.dataProvider.dispatchEvent(new CollectionEvent(CollectionEvent.COLLECTION_CHANGE)); 
+0

Спасибо за ответ, я сам решил проблему. –

1

я решил мою проблему освежающих сеток данных при изменении XML-данных поставщика данных ...

вместо сохранения XML-документа и его загрузки поставщику данных в сетке данных я присвоил обновленный XML-документ данным, провайдера как нового провайдера. Таким образом, проблема обновления, с привязкой, может быть решена.

3

Для тех из вас, кто интересуется внутренними деталями. MX Halo DataGrid и AdvanceDataGrids будут обновляться, когда будут обнаружены изменения в поставщике данных. Это должно быть автоматически. Этот курс будет работать только в том случае, если вы помечаете dataprovider как связываемый и измените переменную, которая сама по себе является поставщиком данных. Это всегда хорошая идея, чтобы ваш dataprovider был ICollectionView.

Например, если вы указали «Массив» или «XML» в качестве датапараузера для datagrid, то datagrid будет внутренне создавать новый массив ArrayCollection или XmlListCollection и вместо этого использовать это вместо dataprovider. В этом случае добавление/удаление в исходный массив не окажет никакого влияния.

Кроме того, в случае, если вам нужно «повторно рисовать» datagrid, вам нужно вызвать invalidateList(). Многие люди думают, что «invalidateDisplayList()» должен это сделать, но это не так. Это относится ко всем элементам управления на основе списка (Ones, которые наследуются от ListBase).

+0

Вы не представляете, насколько вы мне помогли с этим комментарием. Спасибо! –

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