title: How do I sort in a Flex AdvancedDataGrid - callback isn't being called
body: <p>I have an AdvancedDataGrid that uses customer grouping of data. Not all of the groups will be at the same level in the hierarchy, and groups can contain both groups and members. We have a sort callback, but it's not being called except for groups at the leaf-most levels. See code below for an example -- expand all of the groups, then click the sort column on "date of birth" to get a reverse sort by date of birth. (Oddly, for some unfathomable reason, the first ascending sort works.)</p>
  
  <p>We're not getting called for any of the data that's grouped at the same level as a group member.</p>
  
  <p>How do I fix this?</p>
  
  <p>Thanks.</p>
  
  <pre><code>&lt;?xml version="1.0" encoding="utf-8"?&gt;
  &lt;mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
       layout="vertical" 
       verticalAlign="middle" 
       backgroundColor="white" &gt;
    &lt;mx:Script&gt;
      &lt;![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") &amp;&amp; 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;
        }
      ]]&gt;
    &lt;/mx:Script&gt;
  
    &lt;mx:DateFormatter id="dateFormatter" formatString="MMMM D, YYYY" /&gt;
  
    &lt;mx:AdvancedDataGrid id="adgTest" dataProvider="{new HierarchicalData(this.arrData)}" designViewDataType="tree" width="746" height="400"&gt;
      &lt;mx:columns&gt;
        &lt;mx:AdvancedDataGridColumn headerText="Name"  dataField="name"/&gt;
        &lt;mx:AdvancedDataGridColumn dataField="dob" headerText="Date of birth" 
             labelFunction="label_dob" 
             sortCompareFunction="date_sortCompareFunc"
             showDataTips="true" 
             dataTipFunction="date_dataTipFunc" /&gt;
  
      &lt;/mx:columns&gt;
    &lt;/mx:AdvancedDataGrid&gt;
  &lt;/mx:Application&gt;
  </code></pre>