Заполните комбинированные списки ВНУТРИ сетки данных уникальными данными в ActionScript (flex) - PullRequest
3 голосов
/ 21 января 2011

Я искал несколько часов и не нашел ответа на мою проблему.

Я пытаюсь поместить комбинированные списки в таблицу данных, заполненную ДИНАМИЧНЫМИ данными. (Количество и содержание этих комбинированных списков всегда меняются. Я не знаю заранее, сколько существует столбцов, где мне нужно использовать комбинированные списки. Поэтому каждый отдельный комбинированный список получает уникальный поставщик данных, который поступает из внешнего источника, КОГДА программа работает.)

-i нашел МНОГИЕ потоки, обсуждающие эту проблему, но решающие через дрянные файлы mxml, заполняющие комбинированные списки внутри исходного кода вручную. Я хочу отметить, что это не хорошо для меня.

- я нашел лучшее решение, в котором они использовали какой-то специальный обработчик элементов для получения данных из Интернета. (что-то вроде выбора страны), но, к сожалению, этого было недостаточно, потому что число и название стран в мире более или менее статичны, они не меняются. поэтому их класс рендерера не зависел ни от каких параметров основного алгоритма.

но в моей программе я вычисляю данные в своих собственных объектах ActionScript, а затем заполняю их массивом. поэтому в начале я загружаю нужные данные из сети, и когда я получаю ответ на URL-запрос, ПОСЛЕ того, как я начинаю заполнять сетку данных / комбинированный список.

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

Может кто-нибудь помочь? это сводит меня с ума. Раньше мне удавалось делать это на нескольких языках: c #, java, даже php + html, но в flex это выглядит слишком сложно, чем должно быть.

EDIT: я знаю, что такой объем сетевой активности может означать некоторую нагрузку на сервер. я не разработал философию, стоящую за этим, мне просто нужно написать клиента, который соответствует ожиданиям. моя программа выглядит примерно так:

(я хочу переписать любую его часть, просто чтобы эти противные комбо-боксы работали)

=========

файл main.mxml

это основная программа, здесь я обрабатываю некоторые вещи, связанные с входом в систему, и задаю основные свойства дизайна для сетей данных. (например: максимальная ширина, максимальная высота, ограничения макета и т. д.) ничего интересного, кроме команды, когда я создаю экземпляр класса actionscript, который я написал для заполнения сетки данных.

"..<fx:Script>
    <![CDATA[
        private var myGrid1:MyGridType;
        ..
        somefunction {
            myGrid1 = new MyGridType(theDatagridDefinedBefore, "argumentNeededToFillDataGridsWithUniqueData");
        }
    ]]>
</fx:Script>.."

=========

MyGridType.as file

в конструкторе я вызываю urlrequest с помощью второго аргумента, затем добавляю к нему EventListener. когда данные поступают, обработчик событий запускает функцию-заполнитель: я считываю результаты в массив массивов, а затем делаю его поставщиком данных для сетки данных в первом аргументе.

пока все хорошо.

тут возникает проблема с комбо-боксами. для определенного числа столбцов я создаю свой класс combobox. давайте назовем этот класс «MyComboBoxType».

"..
blablabla = new MyComboBoxType(theDatagridDefinedBefore, param1, param2, param3);"

=========

Файл MyComboBoxType.as

Я делаю почти то же самое, что я делал в классе MyGridType. обратиться за помощью из сети с param1-2-3. когда я получу данные, заполни коллекцию массивов. возможно, установите эту коллекцию массивов как поставщик данных для комбинированного списка. AAAAAA, и теперь я хочу, чтобы коллекция массивов или выпадающий список были в сетке данных "theDatagridDefinedBefore".

Ответы [ 2 ]

0 голосов
/ 11 апреля 2011

Вы должны создать свою собственную [Bindable] структуру данных - скажем, MyGridData класс - для строк в сетке (если вы еще этого не сделали);

  • поставщик данных вашей сетки должен быть Array / ArrayCollection /.. MyGridData объектов.
  • этот шаг уже ясно работает, но для целостности: переопределить getItemEditor функция или указать это явно с помощью mxml, чтобы вернуть выпадающий список при необходимости.
  • как и для dataProvider комбобокс, вы должны указать data.comboArray изнутри класс рендерера, где данные являются Экземпляр MyGridData, используемый строкой вы обрабатываете. (переопределяя set data(value: Object):void функция, вы можете предварительно обработать его.)
  • Таким образом, вы работаете с ссылка на ваши оригинальные экземпляры, и по привязке вы можете обнаружить / показать любые изменения к ним напрямую.
0 голосов
/ 21 января 2011

Я знаю, что это не совсем то, чего вы пытаетесь достичь, но у меня была несколько похожая проблема в прошлом. Взгляните на Как получить значение ComboBox в DataGrid , чтобы увидеть, помогает ли оно.

Если бы это был я, я бы заполнил весь набор ArrayCollection, прежде чем связывать их с сеткой данных, если это вообще возможно.

...