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>
Hi Shawn, Haben Sie herauszufinden, warum ist die Sortierung ist nicht in Ihrem Fall? Ich bin versucht zu beheben ähnliches Problem mit sortCompareFunction, meine Daten sind ähnlich wie bei Ihnen: äste müssen nicht denselben Satz von Eigenschaften, die leaf-Objekte und Art callback nur aufgerufen, ersten mal. Thx, Irene

InformationsquelleAutor Shawn Hurley | 2008-09-30

Schreibe einen Kommentar