【问题标题】:Sort Grouped Columns in AdvancedDatagrid在 AdvancedDatagrid 中对分组列进行排序
【发布时间】:2011-02-01 14:37:04
【问题描述】:

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

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

但我无法按“Einnahmen”列对图片中的两行进行排序。对不起德语单词。 你有想法吗?

谢谢 弗兰克

【问题讨论】:

  • 他们不能点击列标题本身有什么原因吗?
  • 我想开始我的应用程序清洁和排序。这就是原因。谢谢!
  • 好的,我在 creationComplete 处理程序中对 adg 的 dataProvider 进行了排序,并且 adg 以排好序的列“einnahmen”出现。但如果我展开一个节点,“monat”列包含从 1 到 12 的所有月份。该行也应该排序。有机会这样做吗?
  • 您是要对“Monat”列的子节点还是父节点中的值进行排序?
  • 说实话,我不知道如何在排序父母或孩子之间做出不同。如果你有一个想法,那就太好了。谢谢 - 弗兰克

标签: apache-flex sorting advanceddatagrid


【解决方案1】:

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

试试这个:

<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> 

我还没有为分组集合尝试过这个,但请告诉我这是如何工作的。

【讨论】:

  • 嘿,这对我来说是新的。谢谢你。不幸的是,它不起作用。我收到这样的错误消息:TypeError:错误 #1009:无法从 AdvancedDataGridBaseEx 访问空对象引用的属性或方法。对不起。但好主意。
  • dataProvider可能还没有初始化完毕
【解决方案2】:

编辑: 我不知道您正在通过 ActionScript 构建您的 dataProvider。不过,在您完成集合后,您应该仍然可以在您的集合上运行 Sort

另一种选择是扩展AdvancedDataGrid 组件并覆盖set dataProvider 方法,以便在绑定数据后立即对其进行排序。这是an example another developer provided (source) 用于Tree 控件,但同样的概念可能也可以用于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;

【讨论】:

  • 嗯,也不行。最后,我无法将 ArrayCollection 转换为 HirachicalData,因为我必须对 AS 中的所有数据进行分组。我认为,在建立分组时,排序会消失。该死的
  • 这是一个 SQLLite-Air 应用程序。数据以平面格式从 SQLite-Database 接收。让我们说 1000 个条目作为一个数组。每个条目都有一个平面格式,例如 Vertrag:"data", name:"data" monat:"data" einahmen:"data"。用英文单词:ContractNumber、CustomerName、month、 Earn。
【解决方案3】:

您是否尝试在 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">

【讨论】:

    【解决方案4】:

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

        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;            
        }
    

    【讨论】:

    • 哇,我明天早上试试。谢谢你。最好添加一些 cmets 以了解您为什么要做什么。但明天我会更深入地研究代码,我希望它会自我解释。谢谢你
    • 好的。不幸的是,我的数据没有这种结构。所以我没有机会在排序父母或排序孩子之间做出不同。但是感谢您在每种情况下提供的代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-05
    • 1970-01-01
    • 2020-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多