Flex:AdvancedDataGrid列dataProvider?

时间:2011-07-12 13:21:47

标签: flex

我有一个AdvancedDataGrid,定义为:

<mx:AdvancedDataGrid id="mainGrid" width="200" height="200" designViewDataType="flat" >
    <mx:columns>
    </mx:columns>
</mx:AdvancedDataGrid>

我将列动态添加到网格中,主要问题是:

  • 如何将数组或向量设置为每列的数据提供者?

P.S。 这个函数我用来填充数据:

private function buildUpTheGrid() : void    {

    masterColumns = new Array();
    masterData    = new Array();

    var tempColumn : AdvancedDataGridColumn;


    for( var iY : int = 0; iY < columsCount; iY++ )                 
    {
        masterData.push( new Array() );
        tempColumn           = new AdvancedDataGridColumn();
        tempColumn.width     = 20;

        for( var iX : int = 0; iX < rowsCount; iX++ )
            masterData[ iY ].push( iX );

    //  tempColumn.dataField = ???
        masterColumns.push( tempColumn );
    }

    mainGrid.columns = masterColumns;
    mainGrid.validateNow();
}

4 个答案:

答案 0 :(得分:2)

对您的问题“如何将数组或向量设置为每个列的数据提供者?”的简短回答:您不能。

flex中的数据“视图”都是基于行的,而不是基于列的。因此,要实现此功能,您需要将列转换为行。这是一个相当简单的算法,我相信你可以弄清楚。

至于动态添加列,只需将列添加到数组中,然后在网格的“columns”属性中设置该数组。您需要在列上设置'dataField'属性,以便知道要从您刚刚转换的行数据中显示哪个数据属性。

答案 1 :(得分:1)

How to setup an array or vector as dataprovider to each Column ?

在DataGrid和AdvancedDataGrid的体系结构中,各个列没有自己独立的dataProviders。要在组件上设置dataProvider,您可以执行以下操作:

<mx:AdvancedDataGrid id="mainGrid" dataPRovider="{myDataProvider}" >

在ActionScript中,您可以像这样设置dataProvider:

mainGrid.dataProvider = myDataProvider

如果您需要在单个DataGrid中显示来自无数不同来源的数据,则应尝试将这些数据合并到单个dataProvider中;使用一些常用元素,例如数据库主键值。创建单个对象以包含每个单独的元素应该有效。概念上是这样的:

public class myCombinedObject{
 public var commonElement : int;
 public var fromDataProvider1 : myCustomDataClass1;
 public var fromDataProvider2 : myCustomDataClass2;
}

从那里只需为每列编写itemRenderers以显示相关数据。

答案 2 :(得分:1)

通常我们会将dataprovider设置为Datagrid。在列中我们可以设置数据字段,它将从数据提供者的对象中获取属性以显示在特定列中。您的目标是使列来自不同的阵列吗?在那种情况下,这将是一个棘手的问题。

答案 3 :(得分:1)

我使用了一个数组Array作为dataProvider。 您只需将dataField属性设置为“子数组”的索引即可。

例如:

tempColumn.dataField = iY.toString();

这很有用,(它用子数组[iY]中的每个值填充列),但我不建议这样做,因为如果子数组中数据的顺序发生变化 它可能变得难以调试......