IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Flash Discussion :

[FLASH MX] NUMBER pour DataGrid


Sujet :

Flash

  1. #1
    Membre éprouvé Avatar de totoche
    Inscrit en
    Janvier 2004
    Messages
    1 090
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 090
    Par défaut [FLASH MX] NUMBER pour DataGrid
    Salut,
    Je souhaite utiliser le fonctions de tri intégrer au datagrid, croissant décroissant, seulement une de mes valeurs CT est transmise comme un chaine de caractère alors qu'il s'agit de nombre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    ...
    var item = { 
                ID : cur.attributes.police ,
                NOM : subNode[0].firstChild.nodeValue + " " + subNode[1].firstChild.nodeValue ,
                CT: subNode[3].firstChild.nodeValue ,
    		    STE : subNode[10].firstChild.nodeValue 
    			} 
            data.push(item);
    Merci de votre aide

  2. #2
    Membre chevronné Avatar de ekameleon
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 401
    Par défaut
    Hello

    Manque plein de truc dans ton code là non ? ... car push c'est pas une méthode du DataGrid.. un DataGrid cela possède un "modèle" que l'on appelle le DataProvider ... c'est ce modèle que tu vas trier :

    Dans le dictionnaire actionscript de flash :
    DataProvider, API
    L'API DataProvider est un jeu de méthodes et de propriétés que doit posséder une source de données pour qu'une classe basée sur des listes puisse communiquer avec elle. Arrays, RecordSets et DataSet implémentent tous cette API. Vous pouvez créer une classe compatible DataProvider en implémentant toutes les méthodes et propriétés présentées dans cette section. Un composant basé sur des listes peut ensuite utiliser cette classe comme fournisseur de données.
    Toi ce qui t'intéresse donc c'est :
    DataProvider.sortItems()
    Trie les éléments du fournisseur de données via la fonction de comparaison ou les options de tri spécifiées.

    DataProvider.sortItemsBy()
    Trie les éléments du fournisseur de données par ordre alphabétique ou numérique, dans l'ordre spécifié et selon le critère du nom de champ spécifié.
    Du coup en continuant la lecture sur le DataProvider :
    DataProvider.sortItemsBy()
    Disponibilité
    Flash Player 7.

    Edition
    Flash MX Professional 2004.

    Utilisation
    myDP.sortItemsBy(fieldName, optionsFlag)
    myDP.sortItemsBy(fieldName, order)

    Paramètres
    fieldName Chaîne spécifiant le nom du champ à utiliser pour le tri. Cette valeur est en général « label » ou « data ».

    order Chaîne spécifiant si le tri des éléments doit être effectué par ordre croissant (« ASC ») ou décroissant (« DESC »).

    optionsFlag Permet d'effectuer plusieurs types de tris dans un seul tableau sans avoir à répliquer l'intégralité du tableau ou à le trier à plusieurs reprises. Ce paramètre est facultatif.

    Les valeurs possibles pour optionsFlag sont les suivantes :

    Array.DESCENDING trie par ordre décroissant.
    Array.CASEINSENSITIVE trie sans respecter la casse.
    Array.NUMERIC trie par ordre numérique si les deux éléments comparés sont des nombres. S'il ne s'agit pas de nombres, effectuez une comparaison de type chaîne (qui peut être non sensible à la casse si l'indicateur est spécifié).
    Array.UNIQUESORT si deux objets du tableau sont identiques ou comportent des champs de tri identiques, cette méthode renvoie un code d'erreur (0) au lieu d'un tableau trié.
    Array.RETURNINDEXEDARRAY renvoie un tableau d'index d'entiers correspondant au résultat du tri. Par exemple, le tableau suivant renverra la seconde ligne de code et ne sera pas modifié : ["a", "d", "c", "b"]
    [0, 3, 2, 1]

    Vous pouvez combiner ces options en une seule valeur. Par exemple, le code suivant associe les options 3 et 1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    array.sort (Array.NUMERIC | Array.DESCENDING)
    Renvoie
    Aucune.

    Description

    Méthode qui trie les éléments du fournisseur de données dans l'ordre spécifié, via le nom de champ spécifié. Si les éléments fieldName sont une combinaison de chaînes de texte et d'entiers, les éléments entiers sont indiqués en premier. Le paramètre fieldName est généralement « label » ou « data », mais les programmeurs expérimentés peuvent spécifier n'importe quelle primitive.

    Cette méthode déclenche l'événement modelChanged avec le nom d'événement sort.

    Elle représente le moyen le plus rapide pour trier les données dans un composant. Elle permet également de conserver l'état de sélection du composant. La méthode sortItemsBy() est rapide, car elle n'exécute pas de code ActionScript pendant le tri. La méthode sortItems() doit exécuter une fonction de comparaison ActionScript et se révèle donc plus lente.

    Exemple
    Le code suivant trie les éléments d'une liste par ordre croissant en utilisant leurs étiquettes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myDP.sortItemsBy("label", "ASC");
    Voilà en gros.. donc lis bien tout cela et tu verras qu'il faut trier en mettant NUMERIC en paramètre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    myDataGrid.dataProvider.sortItemsBy("CT", Array.NUMERIC) ; // par exemple
    EKA+

  3. #3
    Membre éprouvé Avatar de totoche
    Inscrit en
    Janvier 2004
    Messages
    1 090
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 090
    Par défaut
    Bonjour EKA,

    il me semble que mon probleme est de nature de conversion, car il ne traite pas mes valeur CT comme des numeriques

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    var x = new XML(); //création de l'objet XML 
    x.ignoreWhite=true; //ignorer les sauts de ligne 
    x.onLoad = function(success) { 
          if (!success && this.status == 0) { 
          trace ("error !") ; 
          return ; 
       } 
       var data:Array = new Array(); 
       var node:Array = this.firstChild.childNodes ; 
       var l:Number = node.length ; 
       for (var i = 0; i < l ; i++) { 
          var cur = node[i] ; 
    	    if (cur.nodeName == "assure") { 
    	    var subNode:Array = cur.childNodes ;
    		var item = { 
                ID : [cur.attributes.police] ,
                NOM : [subNode[1].firstChild.nodeValue+ " " + subNode[1].firstChild.nodeValue] ,
                CT: [subNode[3].firstChild.nodeValue] ,
    		    STE : [subNode[10].firstChild.nodeValue] 
    			} 
    			data.push(item); 
          } 
       } 
       liste_dset.items = data;
       list_dg.dataProvider.sortItemsBy("CT", Array.NUMERIC) 
       } 
    x.load("ficheAssu.xml");
    remarque je suis obligé de mettre dans un tableau [] :
    ID : [cur.attributes.police]
    , car lsinon le dataset (liste_dset) lqui injecte dans le datagrid via son boundTo , ne les affiche pas , elles sont dans le dg mais invisibles...

  4. #4
    Membre chevronné Avatar de ekameleon
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 401
    Par défaut
    Un xml c'est une chaine de caractère.. en lisant ta question j'avais pas tilté là dessus ... lol excuse

    Du coup quand tu récupères une valeur dedans ... c'est quoi qu'il arrive un bout de cette chaine de caractère Pour transformer ce bout en nombre faut taper par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    var item = {
                ID : cur.attributes.police ,
                NOM : subNode[0].firstChild.nodeValue + " " + subNode[1].firstChild.nodeValue ,
                CT: Number(subNode[3].firstChild.nodeValue) ,
               STE : subNode[10].firstChild.nodeValue
    }
    data.push(item) ;
    Tu peux aussi faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    var a = "1" * 1 ;
    trace (a + " : " + typeof(a)) ;
     
    var a = parseInt("1") ;
    trace (a + " : " + typeof(a)) ;
    Au choix

    EKA+

  5. #5
    Membre éprouvé Avatar de totoche
    Inscrit en
    Janvier 2004
    Messages
    1 090
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 090
    Par défaut
    j'ai NAN dans la colonne avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CT: [Number(subNode[3].firstChild.nodeValue)] ,
    et avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CT: [parseFloat(subNode[3].firstChild.nodeValue)] ,
    dans la colonne j'ai les montants qui s'affichent mais les ", " fument !!
    faut sans doute que je les transforment en "." dans mon xml.
    Cependant même avec parseFloat ou parseInt l'action sur le dataGrid ne respecte pas la chronologie je passe par exemple
    127
    51
    95

    mais

  6. #6
    Membre chevronné Avatar de ekameleon
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 401
    Par défaut
    Pourquoi tu en fais un tableau ?
    pourquoi tu écris pas juste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
             CT : Number(subNode[3].firstChild.nodeValue) ,
    Je te conseille de faire + de trace et de voir aussi le typeof des objets .. fait un typeof( data.CT ) ... par exemple

    EKA+

  7. #7
    Membre éprouvé Avatar de totoche
    Inscrit en
    Janvier 2004
    Messages
    1 090
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 090
    Par défaut
    je l'ai mis en remarque dans mon post1, mais c'était peut-être pas très clair:

    je me sert d'un composant dataSet comme provider du datagrid, via boundTo
    or si je ne mets pas dans un tableau,
    le datagrid n'affiche pas les enregistrements ....
    on peut survoller le datagrid et on voit qu'il contient des enrgistrements car la ligne est en surbrillance, mais les données sont invisibles...

  8. #8
    Membre chevronné Avatar de ekameleon
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 401
    Par défaut
    Etrange ? Je te dirais que je préfère en général coder mes propres fonctions de parsing... je sais ainsi exactement ce que j'ai à faire
    EKA+

  9. #9
    Membre éprouvé Avatar de totoche
    Inscrit en
    Janvier 2004
    Messages
    1 090
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 090
    Par défaut
    l'intéret que je trouve a passer par un dataSet , est l'utilisation du filterFunc

  10. #10
    Membre chevronné Avatar de ekameleon
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 401
    Par défaut
    Mouep .. quand tu sais comment ils ont fait leur FilterFunc ... pas dure de faire pareil hein et surtout mieux et moins lourd... car au bout du compte le blem des composants de MM c'est le poid et l'optimisation sur des grosses données .. on peut pas tout avoir c'est clair, c'est un choix
    EKA+

Discussions similaires

  1. [FLASH MX] Commande pour retarder une action
    Par anksou dans le forum Flash
    Réponses: 15
    Dernier message: 23/11/2004, 09h33
  2. [FLASH MX2004] Commande pour déclencher un clip
    Par Ticoche dans le forum Flash
    Réponses: 13
    Dernier message: 19/11/2004, 16h16
  3. [FLASH MX] Problème pour défilement images
    Par Buzhug dans le forum Flash
    Réponses: 10
    Dernier message: 22/10/2004, 21h09
  4. Réponses: 2
    Dernier message: 27/08/2004, 11h57
  5. [FLASH MX 2004 PRO] DataGrid
    Par kenshi dans le forum Flash
    Réponses: 2
    Dernier message: 26/04/2004, 10h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo