代码之家  ›  专栏  ›  技术社区  ›  Richard Haven

高级数据报外壳:分组行上的数据

  •  0
  • Richard Haven  · 技术社区  · 15 年前

    我需要一个分层的网格,它在列中显示父行和子行的数据。

    - a parent | 1234 | data | data |
       a child | 2222 | data | data |
       a child |  212 | data | data |
    

    我试图使ADG工作,但默认情况下,它的所有列(除了父行的分组列)都为空。我想我可以使用项目渲染器将数据推到那里。

    我的阻塞问题是我的分组似乎根本不起作用。我可以在设置dataProvider=MyArrayCollection时看到数据,但是

    <mx:GroupingCollection id="GroupingCollection" 
               source="{this.specificReportData.gridData}">
        <mx:Grouping label="childName">
            <mx:GroupingField name="parentName" />
        </mx:Grouping>
    </mx:GroupingCollection>
    

    工作:不显示任何数据。我试过有一个明确的“childname”列,但没有。我试过将它包装在HierarchicalCollectionView中,但这也不起作用。我已经完成了基本的分组教程,我的代码和数据看起来像是遵循模式。

    有什么想法吗?

    2 回复  |  直到 15 年前
        1
  •  1
  •   Thomas Müller    15 年前

    数据源中不能包含父级。您需要这样的数据源:

       a child | 2222 | data | data | parentid | parentname
       a child |  212 | data | data | parentid | parentname
    

    并将GroupingField设置为ParentID或ParentName。分组使平面数据源形成层次结构,从而为您创建父级。

        2
  •  1
  •   Richard Haven    15 年前

    答案是,advancedDataGrid不是为执行我想要的操作而构建的。

    它很棒 分组 具有公共值的数据;它不擅长将实际父元素作为行本身存在的数据分组。我还要求排序和过滤只应用于父元素(基于它们自己的数据);任何可见的父元素都可以显示它们的子元素,而子元素从不排序。

    我的两阶段解决方案是首先通过迭代数据并创建父元素数组并添加 children 为保存子元素的元素提供数组属性。请注意,这些是引用数组;我不会复制实际数据。

    接下来,我将对父数组应用任何排序和筛选(可能通过使用arraycollection包装器)并遍历父数组,复制可见数组(如果父数组被标记,则复制它们的子数组)。 expanded )显示数组。我的网格它们使用显示数组作为简单(例如,未分组)的数据提供程序。自定义项呈现器将缩进子级并更改 扩大 父元素的属性,它将重新生成显示数组。

    这不仅是一个更简单、更直观的解决方案,而且不需要读者或维护人员来理解ADG的特性(我的座右铭:没有聪明的代码)。

    谢谢托马斯的努力。我给你的答复是A+1,尽管我没有把它标为答案。

    干杯