2010-04-08 12 views
2

BackGround: J'ai une grille de données avancée. Le fournisseur de données pour cet ADG est un ArrayCollection. Il y a une collection de regroupement sur un champ ID de cette AC.Collection de regroupement séparant le chiffre 5 de la chaîne "5"

Exemple d'un articles couple dans ce AC le nom var AC est "arcTemplates":

(mx.collections::ArrayCollection)#0 
    filterFunction = (null) 
    length = 69 
    list = (mx.collections::ArrayList)#1 
    length = 69 
    source = (Array)#2 
     [0] (Object)#3 
     abbreviation = "sore-throat" 
     insertDate = "11/16/2009" 
     name = "sore throat" 
     templateID = 234 
     templateType = "New Problem" 
     templateTypeID = 1 
    [32] (Object)#35 
     abbreviation = 123 
     insertDate = "03/08/2010" 
     name = 123 
     templateID = 297 
     templateType = "New Problem" 
     templateTypeID = 1 
    [55] (Object)#58 
     abbreviation = 1234 
     insertDate = "11/16/2009" 
     name = 1234 
     templateID = 227 
     templateType = "Exam" 
     templateTypeID = 5 
    [56] (Object)#59 
     abbreviation = "breast only" 
     insertDate = "03/15/2005" 
     name = "breast exam" 
     templateID = 195 
     templateType = "Exam" 
     templateTypeID = 5 

Exemple code Flex menant au Groupement:

<mx:AdvancedDataGrid displayItemsExpanded="true" id="gridTemplates"> 
    <mx:dataProvider> 
    <mx:GroupingCollection id="gc" source="{arcTemplates}"> 
     <mx:Grouping > 
     <mx:GroupingField name="templateTypeID" compareFunction="gcSort"> 

GC fonction de tri:

public function gcSort(a:Object, b:Object):int{ 
    return ObjectUtil.stringCompare(String(a.templateTypeID + a.name).toLowerCase(), 
            String(b.templateTypeID + b.name).toLowerCase()); 
} 

Problème: Dans mon exemple AC il y a e quelques éléments, les éléments 0, 32 et 56 correctement trier et grouper à leur templateTypeID, mais l'article 55 fait quelque chose de bizarre. Il semble trier/grouper sur le numérique 5 au lieu de la chaîne "5". Obtient étranger. Si je change la propriété de nom pour contenir le texte (ainsi 1234x) alors trie/groupe correctement à la chaîne "5"

Question: Que se passe-t-il ici et comment le réparer?

Répondre

2

Si je fais confiance à votre trace, vous voyez que name=1234 est écrit sans guillemets, donc il est considéré comme Number.

Lorsque vous faites dans votre gcSortString(a.templateTypeID + a.name), vous êtes en fait en ajoutant cette fois deux chiffres (5+1234) et les convertir à un String =>"1239".

Ce que vous pouvez faire est de convertir d'abord votre nom en chaîne, puis faites votre concaténation:

(a.templateTypeID + a.name.toString()).toLowerCase() 
+0

Merci Patrick, testé votre solution et il fonctionne très bien. Était une erreur de débutant :-(mais alors c'était un code très tôt pour moi.Je pense que cela m'a aussi jeté que l'article 32 groupait/triage très bien, ce qui est plutôt confuse, mais je comprends maintenant pourquoi. – invertedSpear