2010-02-12 2 views
1

J'ai une colonne dans une grille de données qui a les valeurs de "Monday", "Tuesday" etc, comme varchars, et je voulais savoir, comment puis-je trier la colonne pour être dans le bon ordre. Faire un tri normal ne fonctionne pas évidemment, car les jours ne sont pas classés par ordre alphabétique naturellement (Mer après jeu). Je suppose une sorte d'itemrenderer, mais quelqu'un a eu un extrait de code pour illustrer comment cela fonctionnerait?Flex: Comment avoir une colonne triée dans datagrid pour les jours (lun, mar, mer)?

Merci

Répondre

1

Pour autant que je sais qu'il n'y a rien intégré soit pour trier jours de la semaine ou obtenir un numéro de jour d'un jour de la semaine, donc vous devez construire à la fois. Vous n'avez pas besoin d'un itemRenderer personnalisé pour faire le tri cependant, juste une fonction de comparaison de type.

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> 
    <mx:Script> 
     <![CDATA[ 
      import mx.collections.ArrayCollection; 

      [Bindable] 
      private var days:ArrayCollection = 
           new ArrayCollection([{day: "Wednesday"}, 
                {day: "Thursday"}, 
                {day: "Monday"}, 
                {day: "Tuesday"}, 
                {day: "Sunday"}, 
                {day: "Saturday"}, 
                {day: "Friday"} 
                ]); 

      private static var dayMap:Object = { 
              Sunday: 0, 
              Monday: 1, 
              Tuesday: 2, 
              Wednesday: 3, 
              Thursday: 4, 
              Friday: 5, 
              Saturday: 6}; 

      private function daySorter(day1:Object, day2:Object):int { 
       var i1:int = dayMap[day1.day]; 
       var i2:int = dayMap[day2.day]; 

       return i1 < i2 ? -1 : i1 == i2 ? 0 : 1; 
      } 
     ]]> 
    </mx:Script> 

    <mx:DataGrid dataProvider="{days}"> 
     <mx:columns> 
      <mx:DataGridColumn dataField="day" sortCompareFunction="{daySorter}" /> 
     </mx:columns> 
    </mx:DataGrid> 
</mx:Application> 
Questions connexes