【问题标题】:Can AdvancedDataGrid automatically detect AdvancedDataGridColumnGroupAdvancedDataGrid 能否自动检测 AdvancedDataGridColumnGroup
【发布时间】:2011-08-04 11:46:05
【问题描述】:

我正在尝试此链接中的示例:Adobe Flex 4 * Creating column groups

数据是

import mx.collections.ArrayCollection;
            [Bindable]
            private var dpHierarchy:ArrayCollection = new ArrayCollection([
                {Region:"Southwest", Territory:"Arizona", 
                    Territory_Rep:"Barbara Jennings", 
                    Revenues:{Actual:38865, Estimate:40000}}, 
                {Region:"Southwest", Territory:"Arizona", 
                    Territory_Rep:"Dana Binn", 
                    Revenues:{Actual:29885, Estimate:30000}},  
                {Region:"Southwest", Territory:"Central California", 
                    Territory_Rep:"Joe Smith", 
                    Revenues:{Actual:29134, Estimate:30000}},  
                {Region:"Southwest", Territory:"Nevada", 
                    Territory_Rep:"Bethany Pittman", 
                    Revenues:{Actual:52888, Estimate:45000}},  
                {Region:"Southwest", Territory:"Northern California", 
                    Territory_Rep:"Lauren Ipsum", 
                    Revenues:{Actual:38805, Estimate:40000}}, 
                {Region:"Southwest", Territory:"Northern California", 
                    Territory_Rep:"T.R. Smith", 
                    Revenues:{Actual:55498, Estimate:40000}},  
                {Region:"Southwest", Territory:"Southern California", 
                    Territory_Rep:"Alice Treu", 
                    Revenues:{Actual:44985, Estimate:45000}}, 
                {Region:"Southwest", Territory:"Southern California", 
                    Territory_Rep:"Jane Grove", 
                    Revenues:{Actual:44913, Estimate:45000}}
            ]);


<?xml version="1.0"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:mx="library://ns.adobe.com/flex/mx" 
    xmlns:s="library://ns.adobe.com/flex/spark">

    <fx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;

            // Import the data used by the AdvancedDataGrid control. 
            include "SimpleFlatData.as";
        ]]>
    </fx:Script>

    <mx:AdvancedDataGrid id="myADG"
        dataProvider="{dpFlat}"
        width="100%" height="100%">
        <mx:groupedColumns>
            <mx:AdvancedDataGridColumn dataField="Region"/>
            <mx:AdvancedDataGridColumn dataField="Territory"/>
            <mx:AdvancedDataGridColumn dataField="Territory_Rep"
                headerText="Territory Rep"/>
            <mx:AdvancedDataGridColumnGroup headerText="Revenues">    
                <mx:AdvancedDataGridColumn dataField="Actual"/>
                <mx:AdvancedDataGridColumn dataField="Estimate"/>
            </mx:AdvancedDataGridColumnGroup>    
        </mx:groupedColumns>
   </mx:AdvancedDataGrid>
</s:Application>

在这里,我们必须定义AdvancedDataGridColumnGroup 来定义分组列。

我正在尝试 AdvancedDataGrid 是否可以根据 JSON 数据自动检测列。我尝试使用以下代码:

<mx:AdvancedDataGrid id="inboxDg"
    designViewDataType="flat"
    editable="true"
    dataProvider="{dpHierarchy}"
    width="100%" height="100%">

</mx:AdvancedDataGrid>

使用此代码,AdvancedDataGrid 会自动检测列名和数据。但它无法为Revenues 创建嵌套列。理想情况下,它应该为其创建 2 个子列,分别为 ActualEstimate,但它只创建了一列,并且显示数据为 [object Object]

有没有办法让 AdvancedDataGrid 自动创建嵌套列?

【问题讨论】:

    标签: apache-flex flex4 advanceddatagrid


    【解决方案1】:

    您的数据不是扁平的,仅仅因为您将其放在一个组中并不意味着它将对其进行分组。 dataField 属性不能在其中使用点表示法,因此您有 2 个选项,使用 labelFunction 属性或创建平面数据模型(我个人更喜欢后者)。

    为此:

    private var dpHierarchy:ArrayCollection = new ArrayCollection([
                    {Region:"Southwest", Territory:"Arizona", 
                        Territory_Rep:"Barbara Jennings", 
                        ActualRevenue:38865,
                        EstimateRevenue:40000}, 
                    {Region:"Southwest", Territory:"Arizona", 
                        Territory_Rep:"Dana Binn", 
                        ActualRevenue:38865,
                        EstimateRevenue:40000},  
                    {Region:"Southwest", Territory:"Central California", 
                        Territory_Rep:"Joe Smith", 
                        ActualRevenue:38865,
                        EstimateRevenue:40000},  
                   etc....
                ]);
    

    然后是你的网格:

    <mx:AdvancedDataGrid id="myADG"
            dataProvider="{dpFlat}"
            width="100%" height="100%">
            <mx:groupedColumns>
                <mx:AdvancedDataGridColumn dataField="Region"/>
                <mx:AdvancedDataGridColumn dataField="Territory"/>
                <mx:AdvancedDataGridColumn dataField="Territory_Rep"
                    headerText="Territory Rep"/>
                <mx:AdvancedDataGridColumnGroup headerText="Revenues">    
                    <mx:AdvancedDataGridColumn dataField="ActualRevenue"/>
                    <mx:AdvancedDataGridColumn dataField="EstimateRevenue"/>
                </mx:AdvancedDataGridColumnGroup>    
            </mx:groupedColumns>
       </mx:AdvancedDataGrid>
    

    如果您愿意,也可以使用 labelFunction 进行查找,但这似乎比实际需要的要复杂。最后,我觉得我应该注意,您应该在列上手动设置标签属性并遵守数据的编码标准(camelCase)。它只是让事情变得更干净:)

    【讨论】:

    • 感谢您的回复。但问题是,数据将使用另一个系统创建,并且决定它将采用嵌套格式。因此,创建平面模型是毫无疑问的。 :( 我们可以修改 AdvancedDataGrid 以将嵌套的 object 解释为嵌套列吗?
    • 即使数据是使用另一个系统创建的,但这并不意味着您无法解释它并将其添加到您选择的数据模型中。如果这看起来工作量太大,您可以随时查看labelFunctions,甚至使用自定义item renderers
    猜你喜欢
    • 2011-04-07
    • 2019-03-27
    • 1970-01-01
    • 1970-01-01
    • 2017-04-06
    • 1970-01-01
    • 2016-04-11
    • 2022-01-17
    • 1970-01-01
    相关资源
    最近更新 更多