AdvancedDataGrid是否可以自动检测AdvancedDataGridColumnGroup

问题描述

| 我正在尝试通过此链接进行示例:Adobe Flex 4 *创建列组 数据是
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_Rep:\"Dana Binn\",Revenues:{Actual:29885,Estimate:30000}},Territory:\"Central California\",Territory_Rep:\"Joe Smith\",Revenues:{Actual:29134,Territory:\"Nevada\",Territory_Rep:\"Bethany Pittman\",Revenues:{Actual:52888,Estimate:45000}},Territory:\"northern California\",Territory_Rep:\"Lauren Ipsum\",Revenues:{Actual:38805,Territory_Rep:\"T.R. Smith\",Revenues:{Actual:55498,Territory:\"Southern California\",Territory_Rep:\"Alice Treu\",Revenues:{Actual:44985,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>
在这里,我们必须定义“ 1”来定义分组的列。 我正在尝试AdvancedDataGrid是否可以基于JSON数据自动检测列。我尝试使用以下代码
<mx:AdvancedDataGrid id=\"inBoxDg\"
    designviewDataType=\"flat\"
    editable=\"true\"
    dataProvider=\"{dpHierarchy}\"
    width=\"100%\" height=\"100%\">

</mx:AdvancedDataGrid>
使用此代码,AdvancedDataGrid自动检测列名称和数据。但是它无法为
Revenues
创建嵌套列。理想情况下,它应该为其创建2个子列,分别为
Actual
Estimate
,但它仅创建一列,并且显示数据为
[object Object]
。 有什么方法可以使AdvancedDataGrid自动创建嵌套列?     

解决方法

您的数据并不平坦,仅仅因为您将其放在一个组中并不意味着它将对其进行分组。 dataField属性不能在其中使用点符号,因此您有2个选项,使用labelFunction属性或创建平面数据模型(我个人更喜欢后者)。 去做这个:
private var dpHierarchy:ArrayCollection = new ArrayCollection([
                {Region:\"Southwest\",Territory:\"Arizona\",Territory_Rep:\"Barbara Jennings\",ActualRevenue:38865,EstimateRevenue:40000},{Region:\"Southwest\",Territory_Rep:\"Dana Binn\",Territory:\"Central California\",Territory_Rep:\"Joe Smith\",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进行查找,但这似乎比需要的复杂。最后,我觉得我应该注意,您应该在列上手动设置label属性,并遵守数据的编码标准(camelCase)。它只是使事情变得更干净:)     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...