Мне нужно преобразовать таблицу данных в Adobe Flex в ArrayCollection. Я ожидал, что смогу перебрать каждую строку таблицы данных и записать ее в коллекцию Array, но единственный метод доступа к данным в сетке данных, который я могу найти, - это SelectedItem, который мне не помогает.
Очевидно, можно просто скопировать dataProvider для datagrid, но мой datagrid доступен для редактирования, и мне нужно сохранить состояние datagrid в любой момент в базе данных. Может ли кто-нибудь порекомендовать способ сделать это?
-Матт
Вы можете сделать это, перебирая поля в столбцах, но вы должны использовать поставщик данных. Если единственное место, где находится состояние ваших данных, - это временный элемент управления пользовательского интерфейса, вам необходимо вернуть его в объекты домена и сериализовать их. Предположительно каждая строка в сетке данных представляет собой какой-то объект, и в этом случае я бы переделал вашу проблему, как синхронизировать изменения в сетке данных и объектах домена. Если вы взломаете это, нет необходимости перебирать сетку данных.
Самый простой способ решить проблему синхронизации - это наблюдать за событиями на ваших модулях редактирования в сетке данных. При изменении содержимого сетки вы автоматически обновляете объект домена.
Какие у вас в сетке редакторы?
Если ваш DataGrid:
<mx:DataGrid id = "someDG" dataProvider = "{this.provider}" />
Затем проверьте, является ли this.provider Array или ArrayCollection. Если это ArrayCollection, то получить к нему доступ просто:
var gotIt:ArrayCollection = this.someDG.dataProvider as ArrayCollection;
если это массив, то:
var gotIt:ArrayCollection = new ArrayCollection(this.someDG.dataProvider as Array);
Надеюсь это поможет.
Если он привязан к HTTPService, скорее всего, dataProvider является XMLListCollection. Но вы все равно можете получить значения, как указано выше, и просто использовать XMLListCollection вместо Array или ArrayCollection.