【问题标题】:Flex : AdvancedDataGrid columns dataProvider?Flex:AdvancedDataGrid 列数据提供者?
【发布时间】:2011-10-03 15:17:31
【问题描述】:

我有一个 AdvancedDataGrid,定义为:

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

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

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

附: 我用来填充数据的这个函数:

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

【问题讨论】:

    标签: apache-flex


    【解决方案1】:

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

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

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

    【讨论】:

    • 我试过这个@J_A_X,我创建了一个数组数组,并将数组设置为网格的dataProvider,但是我创建的每一列都需要dataField的字符串......我不知道如何在这种情况下进行设置。
    • 不要创建数组数组,创建对象数组(可以是动态的或模型类),每列都有特定的键(或属性)。这些键是您需要为 dataField 指定的。检查example in the livedocs
    • 各位大神...我需要动态扩展对象属性吗?这是方法吗?
    • masterData[ iY ][ "column" + c.toString() ] = c;
    • 这是一种方法。就个人而言,我会为每一行创建一个具有属性的类:data[rowIndex] = new RowClass(someData, moreDate, moarData);
    【解决方案2】:
    How to setup an array or vector as dataprovider to each Column ?
    

    在 DataGrid 的体系结构中,AdvancedDataGrid 的各个列没有自己的独立数据提供程序。要在组件上设置 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 以显示相关数据。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        我使用了一个数组数组作为数据提供者。 您可以将dataField 属性设置为“子数组”的索引。

        例如:

        tempColumn.dataField = iY.toString();
        

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-10-20
          • 1970-01-01
          • 1970-01-01
          • 2017-01-08
          • 2020-08-07
          • 2021-12-24
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多