ComboBox / DataGrid Sorter - PullRequest
       3

ComboBox / DataGrid Sorter

1 голос
/ 15 января 2011

Я пытаюсь обновить сортировщик combobox / datagrid из flex3 до версии flex4, но постоянно получаю сообщение об ошибке, что мой мозг новичка не обрабатывает.Ошибка «1067: неявное приведение значения типа Array к несвязанному типу mx.collections: IList.»Пожалуйста, помогите

Вот мой код:

<?xml version="1.0" encoding="utf-8"?>
<s:Application
    xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" 
    xmlns:mx="library://ns.adobe.com/flex/mx"
    creationComplete="fnCreationComplete(event)"
    >
    <fx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;
            import mx.collections.Sort;
            import mx.collections.SortField;
            import mx.events.FlexEvent;         
            import spark.events.DropDownEvent;

            [Bindable]
            private var arrColl:ArrayCollection;

            [Bindable]
            private var arr:Array = [ "time", "teamA", "teamB", "status" ];

            private var SelectedFilter:String;

            protected function fnCreationComplete(event:FlexEvent):void
            {
                arrColl = new ArrayCollection();
                arrColl.addItem( { time: "30:45", teamA: "Ab", teamB: "B", status: "3'" } );
                arrColl.addItem( { time: "20:45", teamA: "Ac", teamB: "C", status: "2'" } );
                arrColl.addItem( { time: "19:45", teamA: "Ad", teamB: "B", status: "1'" } );
            }

            private function fnComboxClosed(e:DropDownEvent):void
            {
                var tempCol:DataGridColumn = this[ comboBox.selectedItem ] as DataGridColumn;
                tempCol.sortDescending = false;
            }

            private function onComboChange( e:Event ) :void
            {
                SelectedFilter = e.currentTarget.selectedItem;
                var sort:Sort = new Sort();
                sort.fields = [ new SortField( SelectedFilter, true ) ];
                arrColl.sort = sort;
                arrColl.refresh();
            }

        ]]>
    </fx:Script>

    <mx:DataGrid id="dg" dataProvider="{arrColl}" 
                 rowCount="7" horizontalCenter="0" top="10">
        <mx:columns>
            <mx:DataGridColumn id="time" headerText="Time" dataField="time"/>
            <mx:DataGridColumn id="teamA" headerText="Team A" dataField="teamA"/>
            <mx:DataGridColumn id="teamB" headerText="Team B" dataField="teamB"/>
            <mx:DataGridColumn id="status" headerText="Status" dataField="status"/>
        </mx:columns>       
    </mx:DataGrid>

    <s:ComboBox id="comboBox"
                dataProvider="{arr}"
                close="fnComboxClosed(event)"
                change="onComboChange(event)" horizontalCenter="0" top="209"/>

</s:Application>

1 Ответ

2 голосов
/ 15 января 2011

В Flex 4 кажется, только компоненты MX могут иметь необработанные объекты данных в качестве своих поставщиков данных. Для компонентов Spark требуются фактические коллекции.

Это из документов Adobe по поставщикам данных в Flex 4:

Для элементов управления Spark нельзя использовать необработанный объект как значение поставщик данных управления. Вы должны указать объект, который реализует Интерфейс IList. Классы, которые реализовать IList включить ArrayCollection, ArrayList и XMLListCollection

Я завернул ваш arr в ArrayCollection, и все скомпилировано:

[Bindable]
private var arr:ArrayCollection = new ArrayCollection([ "time", "teamA", "teamB", "status" ]);
...