Wie Sortiere ich in einen Flex-AdvancedDataGrid - callback nicht aufgerufen wird
Ich habe eine AdvancedDataGrid-verwendet der Kunde die Gruppierung von Daten. Nicht alle Gruppen werden auf der gleichen Ebene in der Hierarchie und Gruppen enthalten kann, die beide Gruppen und Mitglieder. Wir haben eine Art Rückruf, aber es ist nicht genannt, außer für Gruppen auf das Blatt-die meisten Ebenen. Siehe code unten ein Beispiel-erweitern Sie alle Gruppen, dann klicken Sie auf die Spalte Sortieren klicken Sie auf "Datum der Geburt" erhalten Sie eine umgekehrte Sortierung nach Geburtsdatum. (Seltsam, für einige unergründlichen Grund, der zunächst aufsteigend Sortieren funktioniert.)
Wir sind nicht immer genannt, für die Daten, gruppiert auf der gleichen Ebene als Gruppenmitglied.
Wie kann ich dieses Problem beheben?
Dank.
<?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>
InformationsquelleAutor Shawn Hurley | 2008-09-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es scheint, als ob die erste Zeile enthält null-Daten oder eine leere Zeichenfolge ist, und die advanceddatagrid-mit gruppierten Daten, dann die sort-Funktion nicht aufgerufen.
es ist ein bisschen ein hack, ja, aber wenn Sie können dich in eine unrealistische (sagen 1/1/1770), ständige Stück von Daten, die Sie einfügen in die Datenbank/Datei Auslesen/Daten-input-Ebene, dann verwenden Sie die Spalte labelFunction-Rendern als null, wenn Sie den Daten übereinstimmt, die Spalte, sollte es funktionieren, oder zumindest die sort-Funktion wird aufgerufen.
Sorry über die Beantwortung dieser so spät, aber zumindest, wenn jemand anderes versucht, um die Antwort zu finden, werden Sie dies sehen könnte.
InformationsquelleAutor Invalid Character
Diese hat etwas zu tun mit der Logik der SortCompareFunction.
Setzen
dob:"01/01/1970"
für alle Knoten, und die Sortierung funktioniert wie erwartet, ist das richtig?InformationsquelleAutor Swaroop C H
Ich glaube nicht, dass das problem mit der Sortierung gruppiert Daten mit null oder leere Zeichenfolge-Werte (die absolut gültigen Werte); die
docs klar auf die Eigenschaft vertreten durch
dataField
muss eine gültige Eigenschaft dataProvider [Element] ist, d.h. es muss vorhanden sein, null oder sonst.Während ich geben RaySir meine Stimme, die ich nicht ganz einverstanden, dass es ein hack, aber eher du bist der Normalisierung der Daten, die ich denke, ist ein völlig in Ordnung, presentation-layer, was zu tun.
Hier ist ein re-Beispiel:
InformationsquelleAutor Darren Bishop
Während es scheint nicht der Fall zu sein, in diesem Beispiel einem fehlenden Datenfeld auf eine Spalte wird verhindert, Art passiert. Die Systeme sind genau wie beschrieben, die sortCompareFunction wird nie aufgerufen.
Wenn Sie eine benutzerdefinierte Spalte renderer, zieht sich die Felder von Daten auf Ihre eigenen, ist es leicht zu übersehen Füllung in einem Datenfeld Attribut. Alles funktioniert Prima, in diesem Fall, bis Sie gehen zu Sortieren. Die sortCompareFunction nicht aufgerufen werden.
Überprüfen, indem debuggging HierarchicalCollectionView.als, Linie 1259 oder so, in sortCanBeApplied.
InformationsquelleAutor dkropfuntucht