Magazine Internet

DateFormatter et le tri sur les dates

Publié le 05 novembre 2007 par Stef1

J'ai un datagrid qui liste le contenu d'un répertoire. A ce niveau là pas de soucis, je veux afficher la date dans une colonne, et là je me retrouve avec la date complète en anglais à peu près comme ça "Sat Nov 30 01:20:00 GMT-0800 1974".

Il existe dans le package mx.formatters une classe DataFormatter, génial ....

Donc  on teste
    Avant de boucler sur le contenu de  mon répertoire je crée mon objet DateFormatter

            var dateFormatter:DateFormatter = new DateFormatter();
            dateFormatter.formatString ="DD/MM/YYYY";

Puis je boucle sur le contenu du répertoire et pour chaque  item je crée un objet myfile:File.

                // Je récupère la date du fichier ( j'ai eu des problèmes avec Tiger.... )
            var dateObjet:Date = myfile.creationDate;
                // Et je la mets au format défini par formatString  précedemment.
            var laDate:String = dateFormatter.format(dateObjet);

            Ensuite on en fait ce que l'on veut, moi je reconstruit un objet pour chaque fichier de ma boucle et je place tout ça dans un tableau qui se trouve être le dataprovider de mon datagrid.

Puis j'affiche ma date formatée dans une colonne, et c'est  là que se pose  le problème, comme c'est devenu une chaine de caractère (DateFormatter retourne un type String), quand je clic sur le header pour trier, j'obtiens n'importe quoi :(

Je remercie PhilFlash pour la solution http://philflash.inway.fr/flex/dgsimple/dgsimple.html
Donc on oubli tout ce que l'on vient de faire :)

On laisse la date dans  son format d'origine pour le moment et c'est sur le datagrid que l'on va faire les traitements.

Sur chaque colonne d'un datagrid on à l'évenement labelFunction qui comme son l'indique permet de déterminer une fonction pour le label ( c'est facile l'anglais, non ?  :) )

<mx:DataGridColumn headerText="DATE" dataField="date" width="45" labelFunction="showDate" sortCompareFunction="dateCompareFunction"/>

            private function showDate(item:Object, column:DataGridColumn):String
            {    
                if (dateFormat == null) {
                    dateFormat = new mx.formatters.DateFormatter();
                    dateFormat.formatString = "DD/MM/YY";
                }   
                var field:String =  column.dataField;    
                return dateFormat.format(item[field]);
            }

Donc oui ça retourne un type String, mais c'est juste pour l'affichage, les objets de notre dataprovider ont encore un vrai objet Date.

Et pour le tri
<mx:DataGridColumn headerText="DATE" dataField="date" width="45" labelFunction="showDate" sortCompareFunction="dateCompareFunction"/>

On utilise  sortCompareFunction de datagridColumn et on lui affecte une fonction de tri

     private function dateCompareFunction(obj1:Object, obj2:Object):int {
                var result:int = 0;
                result = ObjectUtil.dateCompare(obj1.date, obj2.date);
                return result;
            }

  Et là ça fonctionne  :), un bel affichage et un tri.

N'oubliez pas de faire un import des classes
    import mx.utils.ObjectUtil;
    import mx.formatters.DateFormatter;


Vous pourriez être intéressé par :

Retour à La Une de Logo Paperblog

Ces articles peuvent vous intéresser :

  • Combien coûte la famille royale aux anglais?

    Combien coûte famille royale anglais?

    Ha sempiternelle question!La monarchie anglaise, la reine, la mariage du prince William et la duchesse de Cambridge...Si la famille royale est certainement une... Lire la suite

    Par  Foxweasley
    INSOLITE
  • 10 Gadgets/Produits à acheter pour un sportif

    Gadgets/Produits acheter pour sportif

    Merci de partager cet article 🙂91Share on Pinterest1Partager avec vos amisYour NameYour EmailRecipient EmailEnter a MessageJ'ai lu cet article et je... Lire la suite

    Par  Anthony-Fitness
    COACHING, SPORT
  • adidas NMD_R1 PrimeKnit Tri-Color Pack

    adidas NMD_R1 PrimeKnit Tri-Color Pack

    Ce n’est pas parce que la version 2.0 est sortie que la première s’arrête, adidas nous offre en cette fin d’année les NMD_R1 PrimeKnit Tri-Color Pack. Lire la suite

    Par  Sneakersaddict
    CHAUSSURES
  • Peter Thiel, cofondateur de Paypal et accro aux échecs

    Peter Thiel, cofondateur Paypal accro échecs

    PETER THIEL UN MILLIARDAIRE ACCRO AUX ECHECS Révélation des Echos, le cofondateur de PayPal, fondateur de Palantir, société spécialisée dans l'exploitation et l... Lire la suite

    Par  Chess & Strategy
    ÉCHECS
  • Les pendants architecturaux

    pendants architecturaux

    La période des tableaux d'architecture est assez courte : mi XVIIème à fin XVIIIème, mais très prolifique. Dans cette production, les pendants ne sont pas rares... Lire la suite

    Par  Albrecht
    BEAUX ARTS, EXPOS & MUSÉES
  • Tendance Noêl

    Tendance Noêl

    Avec l'approche des fêtes de fin d'année qui arrivent à TRÈS grands pas, il est important d'être tendance pour Noël ! Mais alors comment préparer Noël en... Lire la suite

    Par  Chloe
    CONSO
  • Art Numérique – Peter Kogler

    Numérique Peter Kogler

    L’artiste autrichien Peter Kogler recouvre l’espace avec des motifs géométriques et numériques, transportant le visiteur dans un autre monde. Peter Kogler est n... Lire la suite

    Par  One360
    MÉDIAS, SOCIÉTÉ

A propos de l’auteur


Stef1 Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte