apache-flex Flex:高级数据网格列数据提供程序?

i34xakig  于 2022-11-01  发布在  Apache
关注(0)|答案(4)|浏览(278)

我有一个高级数据网格,定义为:

<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();
}
edqdpe6u

edqdpe6u1#

对于您的问题“如何将数组或向量设置为每个列的数据提供器?"的简短回答:你不能这样做。
flex中的数据“视图”都是基于行的,而不是基于列的。因此,要实现这一点,您需要将列转换为行。这是一个相当简单的算法,我相信您可以搞清楚。
至于动态添加列,您只需将列添加到数组中,然后在网格的“columns”属性中设置该数组。您需要在列上设置“dataField”属性,以便列知道要从刚刚转换的行数据中显示哪个数据属性。

lyr7nygr

lyr7nygr2#

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

在DataGrid和AdvancedDataGrid的体系结构中,各个列没有自己单独的dataProvider。要在组件上设置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;
}

在此基础上,只需为每列编写itemRenderer以显示相关数据。

slwdgvem

slwdgvem3#

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

tct7dpnv

tct7dpnv4#

我已经使用了一个数组的数组作为dataProvider。你可以只设置dataField属性为“子数组”的索引。
例如:

tempColumn.dataField = iY.toString();

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

相关问题