Заполнение ячейки в dataGrid несколькими значениями, разделенными запятыми - Flex

У меня есть XML-файл с этими данными.

<resultSet> 
<MerchandiseAssortmentCategory>
                                <merchandiseAssortmentCategoryId>275</merchandiseAssortmentCategoryId>
                                <merchandiseAssortmentCategoryName>D21 Plywood</merchandiseAssortmentCategoryName>
                                <merchandiseSubordinateClasses>
                                                <merchandiseSubordinateClass>
                                                                <merchandiseSubordinateClassNumber>2</merchandiseSubordinateClassNumber>
                                                                <merchandiseSubordinateClassDescription>SHEATHING</merchandiseSubordinateClassDescription>
                                                </merchandiseSubordinateClass>
                                                <merchandiseSubordinateClass>
                                                                <merchandiseSubordinateClassNumber>3</merchandiseSubordinateClassNumber>
                                                                <merchandiseSubordinateClassDescription>WAFERBOARD</merchandiseSubordinateClassDescription>
                                                </merchandiseSubordinateClass>
                                                <merchandiseSubordinateClass>
                                                                <merchandiseSubordinateClassNumber>4</merchandiseSubordinateClassNumber>
                                                                <merchandiseSubordinateClassDescription>SANDED</merchandiseSubordinateClassDescription>
                                                </merchandiseSubordinateClass>
                                </merchandiseSubordinateClasses>
</MerchandiseAssortmentCategory>
</resultSet> 

Мне нужно заполнить сетку данных merchandiseAssortmentCategoryName и всеми его merchandiseSubordinateClassNumber (s), разделенными запятыми в той же строке.

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

this.categoryList= evt.result.resultSet.MerchandiseAssortmentCategory;

и так определяется dataGrid

<mx:DataGrid x="466" y="73" width="192" height="225" 
        dataProvider="{categoryList}" 
        verticalScrollPolicy="on" 
        id="categories"
        rowCount="10" enabled="true">
        <mx:columns>
            <mx:DataGridColumn headerText="Category name" dataField="merchandiseAssortmentCategoryName"/>
            <mx:DataGridColumn headerText="Subclasses" dataField="merchandiseSubordinateClasses.merchandiseSubordinateClass.merchandiseSubordinateClassNumber"/>

            </mx:columns>
    </mx:DataGrid>

Когда я запускаю это, заполняется только название категории. номер подчиненного класса просто пуст. Помогите с этим. Спасибо


person girl_coder    schedule 28.06.2011    source источник


Ответы (2)


Вам нужно будет написать labelFunction для возврата списка, разделенного запятыми, который вы хотите отобразить в столбце.

Прочтите эти документы о создании функции настраиваемых ярлыков . Вот некоторые важные детали:

[Начальная цитата]

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

labelFunction(item:Object):String

Параметр элемента, передаваемый элементом управления Label, содержит объект элемента списка. Функция должна возвращать строку для отображения в элементе управления List.

Примечание. Большинство подклассов ListBase также принимают свойство labelFunction с подписью, описанной выше. Для элементов управления DataGrid и DataGridColumn сигнатура метода - labelFunction (item: Object, dataField: DataGridColumn): String, где item содержит объект элемента DataGrid, а dataField указывает столбец DataGrid.

....

<mx:Script><![CDATA[
    public function myLabelFunc(item:Object):String {
        return item.data + ", " + item.label; 
    }
]]></mx:Script>

[Конец цитаты]

Параметр объекта item - это элемент dataProvider, для которого вы хотите создать метку.

Вы можете указать свойство labelFunction для рассматриваемого класса:

<mx:DataGridColumn labelFunction="myLabelFunc" />

Вы также можете сделать то же самое с настраиваемым itemRenderer.

person JeffryHouser    schedule 28.06.2011
comment
Вы можете сделать то же самое с настраиваемым элементом itemRenderer, но labelFunction - лучший способ перейти к преобразованию данных на основе String. - person J_A_X; 28.06.2011
comment
как мне написать labelFunction? - person girl_coder; 28.06.2011
comment
См. Раздел об использовании метки. Функция: Liveocs.adobe .com / flex / 3 / html /. Я обновлю свой ответ. - person JeffryHouser; 28.06.2011
comment
Да, labelFunction имеет смысл ... но как мне получить доступ к полю? Это вложенный XML, а dataField dataGrid не анализирует :( Любая помощь с этим будет очень признательна - person girl_coder; 29.06.2011
comment
Объект, переданный в labelFunction, будет вашим XML-объектом. Выполните в режиме отладки и используйте его, чтобы выяснить, как углубиться в структуру XML. - person JeffryHouser; 29.06.2011

Вот что бы я сделал:

  1. Создайте настраиваемый объект itemRenderer для столбца Subclasses в DataGrid.
  2. Переопределите метод set data, чтобы просмотреть все ваши подклассы и построить строку, разделенную запятыми.
  3. Установите значение метки itemRenderer в строку, разделенную запятыми.
person Jason Towne    schedule 28.06.2011