我有一个高级数据网格,定义为:
<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条答案
按热度按时间edqdpe6u1#
对于您的问题“如何将数组或向量设置为每个列的数据提供器?"的简短回答:你不能这样做。
flex中的数据“视图”都是基于行的,而不是基于列的。因此,要实现这一点,您需要将列转换为行。这是一个相当简单的算法,我相信您可以搞清楚。
至于动态添加列,您只需将列添加到数组中,然后在网格的“columns”属性中设置该数组。您需要在列上设置“dataField”属性,以便列知道要从刚刚转换的行数据中显示哪个数据属性。
lyr7nygr2#
在DataGrid和AdvancedDataGrid的体系结构中,各个列没有自己单独的dataProvider。要在组件上设置dataProvider,可以执行如下操作:
在ActionScript中,您可以像这样设定dataProvider:
如果您需要在单个DataGrid中显示来自无数不同来源的数据,则应该尝试将这些数据组合到单个dataProvider中;使用一些公共元素,如数据库主键值。创建一个包含每个单独元素的对象应该可以工作。概念上类似于:
在此基础上,只需为每列编写itemRenderer以显示相关数据。
slwdgvem3#
通常我们会将dataprovider设置为Datagrid。在列中,我们可以设置datafield,它将从dataprovider的对象中获取属性,并显示在特定的列中。您的目标是使列来自不同的数组吗?在这种情况下,这将是一个棘手的问题。
tct7dpnv4#
我已经使用了一个数组的数组作为dataProvider。你可以只设置
dataField
属性为“子数组”的索引。例如:
这是可行的,(它用子数组[iY]中的每个值填充列),但我不建议这样做,因为如果子数组中数据的顺序发生变化,调试可能会变得困难...