使用分组集合对高级DataGrid进行排序

时间:2013-03-10 14:39:58

标签: actionscript-3 flex air

我创建了一个avanced datagrd和grouping选项来显示数据。 就我而言,我想用他们的书显示作者名单。

<mx:AdvancedDataGrid height="350"
         displayItemsExpanded="true">
<mx:dataProvider>
  <mx:GroupingCollection2 id="groupingCollection"
              source="{bookList}">
    <mx:grouping>
      <mx:Grouping>
        <mx:GroupingField name="author"
                 />
      </mx:Grouping>
    </mx:grouping>
  </mx:GroupingCollection2>
</mx:dataProvider>
<mx:columns>
  <mx:AdvancedDataGridColumn dataField="author"
                 width="150"/>
  <mx:AdvancedDataGridColumn dataField="birthday"
                 width="100"/>
  <mx:AdvancedDataGridColumn dataField="title"
                 width="250"/>
  <mx:AdvancedDataGridColumn dataField="dateOfPublication"
                 width="150"
                 />
</mx:columns>

但即使我的数据提供者在开始时按日期订单开始排序,在分组后,每个组中的订单都会丢失。

你知道如何通过dateOfPublication强制每个组重新排序吗?

由于

1 个答案:

答案 0 :(得分:0)

是的,GroupingCollection2似乎破坏了现有的数据源。

您需要为每个GroupField定义一个排序函数 - 查看GroupFields compareFunction的文档。例如:

<mx:GroupingField name="author" compareFunction="sortByDate"/>

compare函数接受两个对象(数据源的元素),如果第一个项目小于/等于/大于第二个项目,则返回-1/0/1:

private function sortByDate(item1:Object, item2:Object) : int
{
   // Whatever comparison function you want
}