在AdvancedDatagrid中对分组列进行排序

时间:2011-02-01 14:37:05

标签: flex sorting advanceddatagrid

我正在寻找一种解决方案来对advancedDatagrid中的所有分组列进行排序。它应该与点击列标题相同。

请注意,我不是在寻找一种解决方案来对字段中的字段进行排序。有一个名为compareFunction的工作解决方案。

但是我无法按照“Einnahmen”栏目对照片中的两行进行排序。对不起德语单词。 你有好主意吗? enter image description here

谢谢 弗兰克

4 个答案:

答案 0 :(得分:4)

如果您希望使用已排序的列启动应用程序,则需要在创建/ dateprovider更新时模拟标题点击。

试试这个:

<mx:AdvancedDataGrid id="adg"
  updateComplete="adg.dispatchEvent(new AdvancedDataGridEvent(AdvancedDataGridEvent.HEADER_RELEASE, false, true, 3, 'Einnahmen'))">
    <mx:columns>
        ...
        <mx:AdvancedDataGridColumn dataField="Einnahmen" sortDescending="true" />
    </mx:columns>
</mx:AdvancedDataGrid> 

我没有为分组集合试过这个,但让我知道它是如何工作的。

答案 1 :(得分:1)

修改 我不知道你是通过ActionScript构建dataProvider。尽管如此,您仍然可以在集合中运行Sort

另一种选择是扩展AdvancedDataGrid组件并覆盖set dataProvider方法,以便在绑定数据后对其进行排序。这是Tree控件的an example another developer providedsource),但AdvancedDataGrid可能会使用相同的概念。

原始答案:

假设您只是尝试对顶级“Einnahmen”值进行排序(看起来就像是截图),我会在您从任何服务返回数据后手动对dataProvider进行排序用来获取你的数据。

这是手动排序集合的一个非常基本的示例。

[Bindable] public var MyDataList:ArrayCollection;
private var einnahmenSortField:SortField = new SortField("Einnahmen", true, false);
private var theSort:Sort = new Sort();

// Called after data is returned from the remote service call to sort the data
public function SetMyDataList(returnedList:ArrayCollection):void
{
  MyDataList = returnedList;

  if (theSort == null)
  {
    theSort = new Sort();
    theSort.fields = [einnahmenSortField];
  }

  MyDataList.sort = this.theSort;   
  MyDataList.refresh();
}

要将其转换为HierarchicalData以便在AdvancedDataGrid中使用,只需创建HierarchicalData的新实例并将其分配给AdvancedDataGrid,如下所示:

var hd:HierarchicalData = new HierarchicalData(myDataList);
hd.childrenField = "MyChildField";
myAdvancedDataGrid.dataProvider = hd;

答案 2 :(得分:0)

您是否尝试在AdvancedDataGrid标记中设置'sortExpertMode =“true”'?请在下面找到示例代码:

  <mx:AdvancedDataGrid height="318"
                     id="dataSetsDG"
                     allowMultipleSelection="false"
                     folderClosedIcon="{null}"
                     folderOpenIcon="{null}"
                     defaultLeafIcon="{null}"
                     left="28"
                     top="162"
                     rowCount="11"
                     width="70%"
                     displayItemsExpanded="true"
                     sortExpertMode="true">

答案 3 :(得分:0)

我使用'HierarchicalData'作为AdvancedDataGrid的数据提供者。我还从ArrayCollection创建了HierarchialData,维护了排序顺序,它就像魅力一样。你可以尝试一下! 请查找Actionscript代码和示例屏幕截图。

Advanced Datagrid

    public function createHierarchialResultVO(results:ArrayCollection):ArrayCollection
    {
        [ArrayElementType("ResultsVO")]
        var dpHierrarchy:ArrayCollection = new ArrayCollection();

        for each(var result:Result in results)
        {
            var resultVO:ResultsVO= new ResultsVO();
            resultVO.resultName = result.resultName;
            resultVO.runDate = result.runDate.toString();
            resultVO.type="header";

            var childrens:ArrayCollection = new ArrayCollection();
            for each(var processDetails:ProcessDetails in result.details)
            {
                var children:ResultsVO= new ResultsVO();
                children.files =result.fileCount;
                children.status=result.status;
                children.type="result";
            }
            resultVO.children =children;
            dpHierrarchy.addItem(resultVO);
        }
        return dpHierrarchy;            
    }