Comment puis-je trier dans un Flex AdvancedDataGrid - rappel n'est pas appelé
J'ai un AdvancedDataGrid qui utilise le client de regroupement de données. Pas tous les groupes seront au même niveau dans la hiérarchie, et les groupes peuvent contenir à la fois des groupes et des membres. Nous avons une sorte de rappel, mais il n'est pas appelé, sauf pour les groupes à la feuille-la plupart des niveaux. Voir le code ci-dessous pour un exemple -- développer tous les groupes, puis cliquez sur le tri de la colonne "date de naissance" pour obtenir une inversion de trier par date de naissance. (Bizarrement, pour certains insondable raison, le premier tri dans l'ordre croissant).
Nous ne sommes pas appelé pour l'une des données qui sont regroupés au même niveau qu'un membre du groupe.
Comment puis-je résoudre ce problème?
Grâce.
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="vertical"
verticalAlign="middle"
backgroundColor="white" >
<mx:Script>
<![CDATA[
import mx.controls.advancedDataGridClasses.AdvancedDataGridColumn;
import mx.collections.HierarchicalData;
import mx.utils.ObjectUtil;
private var arrData : Array = [
{ name: "User A", dob: "04/14/1980" },
{ name: "User B", dob: "01/02/1975" },
{ name: "Group A", children: [
{ name: "User E", dob: "09/13/1972" },
{ name: "User F", dob: "11/22/1993" }
]
},
{ name: "Group B", children: [
{ name: "Group B1", children: [
{ name: "User I", dob: "01/23/1984" },
{ name: "User J", dob: "11/10/1948" }
]
},
{ name: "User G", dob: "04/09/1989" },
{ name: "User H", dob: "06/20/1963" }
]
},
{ name: "User C", dob: "12/30/1977" },
{ name: "User D", dob: "10/27/1968" }
];
private function date_sortCompareFunc(itemA:Object, itemB:Object):int
{
if ( itemA.hasOwnProperty("dob") && itemB.hasOwnProperty("dob"))
{
var dateA:Date = new Date(Date.parse(itemA.dob));
var dateB:Date = new Date(Date.parse(itemB.dob));
return ObjectUtil.dateCompare(dateA, dateB);
}
else if ( itemA.hasOwnProperty("dob"))
{
return 1;
}
else if (itemB.hasOwnProperty("dob"))
{
return -1;
}
return ObjectUtil.stringCompare(itemA.name, itemB.name);
}
private function date_dataTipFunc(item:Object):String
{
if (item.hasOwnProperty("dob"))
{
return dateFormatter.format(item.dob);
}
return "";
}
private function label_dob(item:Object, col:AdvancedDataGridColumn):String
{
var dob:String="";
if(item.hasOwnProperty("dob"))
{
dob=item.dob;
}
return dob;
}
]]>
</mx:Script>
<mx:DateFormatter id="dateFormatter" formatString="MMMM D, YYYY" />
<mx:AdvancedDataGrid id="adgTest" dataProvider="{new HierarchicalData(this.arrData)}" designViewDataType="tree" width="746" height="400">
<mx:columns>
<mx:AdvancedDataGridColumn headerText="Name" dataField="name"/>
<mx:AdvancedDataGridColumn dataField="dob" headerText="Date of birth"
labelFunction="label_dob"
sortCompareFunction="date_sortCompareFunc"
showDataTips="true"
dataTipFunction="date_dataTipFunc" />
</mx:columns>
</mx:AdvancedDataGrid>
</mx:Application>
OriginalL'auteur Shawn Hurley | 2008-09-30
Vous devez vous connecter pour publier un commentaire.
Il me semble que si la première ligne contient les données de valeur null ou une chaîne vide, et le advanceddatagrid est configuré pour utiliser des données groupées, puis la fonction de tri n'est pas appelée.
c'est un peu un hack, oui, mais si vous pouvez mettre dans un irréalistes (dire 1/1/1770), constant morceau de données que vous pouvez insérer à la base de données/fichier/lecture des données d'entrée de niveau, puis utilisez la colonne labelFunction rendu comme null si les données correspondent à la colonne, il doit travailler, ou au moins la fonction de tri seront appelés.
Désolé de répondre à cette heure si tardive, mais au moins, si quelqu'un d'autre essaie de trouver la réponse, ils pourraient voir cela.
OriginalL'auteur Invalid Character
Cela a quelque chose à voir avec la logique de la SortCompareFunction.
Mettre
dob:"01/01/1970"
pour tous les nœuds du groupe et le tri fonctionne comme prévu, est-ce correct?OriginalL'auteur Swaroop C H
Je ne pense pas que le problème est à voir avec le tri des données regroupées avec la valeur null ou une chaîne vide des valeurs (qui sont parfaitement valables valeurs); la
docs clairement état de la propriété représentée par
dataField
doit être une propriété valide sur le dataProvider [article] c'est à dire qu'il doit exister, ou null sinon.Tandis que je donne RaySir mon vote, je n'ai pas tout à fait d'accord que c'est un hack, mais plutôt que vous êtes normalisation de vos données, ce qui je pense est une parfaitement bien la présentation de la couche chose à faire.
Ici, c'est une re-travaillé exemple:
OriginalL'auteur Darren Bishop
Alors qu'il ne semble pas être le cas dans cet exemple, un manque dataField sur une colonne s'empêcher de tri de passe. Les systèmes sont exactement comme décrit, le sortCompareFunction n'est jamais appelée.
Si vous avez une colonne personnalisée convertisseur qui est en tirant les champs de données sur son propre, il est facile de négliger de remplir un champ de données d'attribut. Tout fonctionne bien, dans ce cas, jusqu'à ce que vous allez faire le tri. Le sortCompareFunction ne sera pas appelé.
Vérifier par debuggging HierarchicalCollectionView.comme, à la ligne 1259, dans sortCanBeApplied.
OriginalL'auteur dkropfuntucht