2012-08-29 1 views
0

J'ai un problème étrange.Colonne Flex DataGrid trier par ordre décroissant ne fonctionne pas

Dans Flex 4, j'ai un Spark DataGrid et j'ai à la fois un rendu d'élément et une fonction de comparaison de type définie pour l'une des colonnes. Bizarrement, cette colonne ne sera pas triée par ordre décroissant.

Les données ne sont pas triées à l'origine. Cliquer sur l'en-tête de la colonne affiche la flèche «haut» et les données sont triées par ordre croissant. Cependant, cliquer à nouveau sur l'en-tête de colonne ne fait rien. La flèche "up" reste et les données restent triées dans l'ordre croissant.

J'ai débogué à travers le code et a trouvé que column.sortDescending dans la fonction de comparaison de tri est toujours false (devrait-il être vrai quand le tri décroissant devrait se produire?).

J'ai googlé ceci pendant un long moment et j'ai cherché ici mais je n'ai rien trouvé.

Vous avez des idées?

Merci d'avance.

// Modifier

Code simple Exemple:

fonction creationComplete initialise données à l'aide des valeurs aléatoires:

protected function application1_creationCompleteHandler(event:FlexEvent):void 
      { 
       arrayData = new ArrayCollection(); 

       var obj:Object; 
       for(var i:Number=0; i < 10; i++) { 
        obj = new Object(); 
        obj.value1 = i; 
        obj.value2 = Math.floor(Math.random() * (1 + 100 - 1)) + 1; 
        obj.value3 = Math.floor(Math.random() * (1 + 100 - 1)) + 1; 

        arrayData.addItem(obj); 
       } 
      } 

Datagrid définit les colonnes avec 4ème colonne ayant un rendu d'élément et trier comparer fonction définie.

<s:DataGrid x="122" y="142" width="391" height="223" requestedRowCount="4" dataProvider="{arrayData}"> 
     <s:columns> 
      <s:ArrayList> 
       <s:GridColumn dataField="value1" headerText="Value 1"></s:GridColumn> 
       <s:GridColumn dataField="value2" headerText="Value 2"></s:GridColumn> 
       <s:GridColumn dataField="value3" headerText="Value 3"></s:GridColumn> 
       <s:GridColumn headerText="Value 3" sortable="true" itemRenderer="ItemRendererTest" sortCompareFunction="sortCompareFunc"></s:GridColumn> 
      </s:ArrayList> 
     </s:columns> 
     <s:typicalItem> 
      <fx:Object dataField1="Sample Data" dataField2="Sample Data" dataField3="Sample Data"></fx:Object> 
     </s:typicalItem> 
    </s:DataGrid> 

article Code renderer:

override public function prepare(hasBeenRecycled:Boolean):void { 
       var columnString:String = data["value1"] + ":" + data["value2"] + ":" + data["value3"]; 

       lblData.text = columnString; 
      } 

comparer Trier Fonction:

private function sortCompareFunc(obj1:Object, obj2:Object, col:GridColumn):int { 
       var obj1String:String = obj1["value1"] + ":" + obj1["value2"] + ":" + obj1["value3"]; 
       var obj2String:String = obj2["value1"] + ":" + obj2["value2"] + ":" + obj2["value3"]; 

       var collator:SortingCollator = new SortingCollator(); 

       return collator.compare(obj1String, obj2String); 
      } 
+0

Veuillez indiquer suffisamment de code pour illustrer ce problème. Un échantillon simple exécutable serait idéal. – JeffryHouser

+0

Ajout d'un simple exemple de code –

Répondre

3

Juste avait quelque chose de semblable à moi-même semble que le contrôle de la grille d'allumage a besoin d'une dataField définition même si vous avez une fonction de tri de tri personnalisé, essayez simplement d'ajouter dataField = "value1" sur votre 4ème colonne même si vous ne l'utiliserez pas, voir si cela vous aide.

+0

C'est la bonne réponse - je viens juste de le faire moi même si j'utilise labelFunction. Tant pis. Merci;) –

+0

A travaillé un homme de charme. Merci beaucoup! Je ne sais pas comment j'ai raté que vous avez répondu à cela avant. Étrange qu'il en a besoin. –

Questions connexes