2010-02-25 3 views
2

Я хочу использовать один источник данных (например, массив) для нескольких Datagrids, которые имеют разные фильтры, и отображают разные столбцы. Во-первых, я думал, что я использую очень прямо вперед apporach:Использование одного источника данных для нескольких datagrids в Flex3

  • создать массив
  • создать ArrayCollection для каждого DataGrid и установите свойство «источник» в массив
  • создать DataGrids и установить их dataProvider для присвоенного ему ArrayCollection

Так что теперь. каждый ArrayCollection может иметь свою собственную filterFunction, состояние сортировки и т. д., но должен быть только один массив со всеми данными в памяти.

Теперь до такой степени, что меня полностью смутили: Поскольку новые элементы добавляются в массив, конечно, никаких событий не отправляются, и я должен вызывать itemUpdated вручную на каждом из массивов ArrayCollections. Отлаживая код, чтобы получить более глубокое понимание для Flex, я попытался выяснить, что делает этот грязный метод «itemUpdated», особенно, как отмечается в документации Adobe, если нет «свойства» (например, он равен нулю), произойдет простое «refresh()». Я не нашел никаких вызовов для «refresh()» во всей отладке (и я спустился по всей структуре как можно глубже (кстати, в коде есть много смешных комментариев :-)). Единственное, что я смог найти, - это CollectionChangeEvent, отправляемый с PropertyChangeEvent в свой «элемент». Что было такого типа «ОБНОВЛЕНИЕ» (а не, как и следовало ожидать, «ДОБАВИТЬ»). При попытке отправить это событие вручную, он никогда не работал (например, файл данных не обновлялся). Я знаю, что я должен придерживаться пунктаUpdated на данный момент, но поскольку dataprovider может стать большим (в обоих измерениях), производительность меня касается, и я буду понимать, что происходит под капотом.

И, как и ожидалось, никакой помощи от самана :-(

так большое спасибо за все, кто читают весь этот текст. и еще больше СПАСИБО всем, кто отвечает и дает мне slightes намек в том, как я может выйти из путаницы и понять (если то возможно) ФСТЗ немного лучше.

лучшего из всех отношений,

Герберта

+0

Я смущен. Почему у вас есть 1 массив, являющийся источником нескольких массивов, которые затем являются источником для datagrids? Почему не просто 1 ArrayCollection, который является источником для всех DataGrids? – Karthik

ответ

1

Вы должны вызвать ArrayCollection.refresh() для каждого из ваши dataProviders, чтобы заставить dataGrids отображать новые изменения в исходном массиве.

+0

Конечно, простое обновление всегда будет трюком. Но поскольку у меня есть достаточно данных в этой Grid (и да, я знаю, пейджинг и прочее), полное обновление будет делать то, что он говорит, и пересчитывать всю сетку, что совершенно необязательно, просто добавляя одну запись. Это идея itemUpdated, поскольку она (если она снабжена правильными параметрами) не приведет к обновлению, а приведет к соответствующим событиям. Просто сравните то, что происходит в методе refresh и в методе itemUpdated. Это не одно и то же. – cboese

+0

Мне кажется, что никто не понимает, что происходит за кулисами API Flex, когда дело доходит до dataProviders.Мой первоначальный вопрос указал на решение «refresh() - less» для повышения производительности, но поскольку такого метода нет, я соглашусь с этим ответом (несмотря на то, что он неполный/не то, что я имел в виду), чтобы сделайте это понятным для людей, которые находят эту тему от google и справедливости, поскольку метод Rubosto всегда будет работать (довольно «надежный» ;-)) – cboese