2011-01-15 8 views
1

Ich versuche, einen Combobox/Datagrid-Sortierer, der von Flex3 kam, zu einer Flex4-Version zu aktualisieren, aber ich bekomme immer einen Fehler, den mein Newbie-Gehirn nicht verarbeitet. Der Fehler ist "1067: Implizite Koerzition eines Werts vom Typ Array zu einem nicht verwandten Typ mx.collections: IList." Bitte helfenComboBox/DataGrid Sorter

Hier ist mein Code:

<?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> 

Antwort

2

In Flex 4, so scheint es only MX components Rohdaten Objekte als ihre Datenlieferanten haben. Spark-Komponenten erfordern tatsächliche Sammlungen.

Diese von der Adobe-docs auf Datenanbietern in Flex 4:

für Spark-Steuerelemente, können Sie keine raw-Objekt als Wert der Kontrolle des Datenanbieters verwenden. Sie müssen ein Objekt angeben, das die IList-Schnittstelle implementiert. Klassen, die Umsetzung IList umfassen Arraycollection, Arraylist und XMLListCollection

ich Ihre arr in eine Arraycollection gewickelt und alles zusammengestellt:

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

Das tat es! Vielen Dank – dmschenk