Flex 中的动态数据网格列

Dynamic datagrid columns in Flex

我的系统中有 <mx:DataGrid>,如下所示。

<mx:DataGrid id="testDG">
  <mx:columns>
    <mx:DataGridColumn headerText="name" dataField="name">
    <mx:DataGridColumn headerText="measure" dataField="measure">
  </mx:columns>
</mx:DataGrid>

它有两列,namemeasure。我想添加另一个列数,它是数据网格中关于 measure.

的数据

所以,它看起来像:

name  measure  1-Aug  2-Aug   3-Aug ...

abc   ggggg    20      22      24   ...
xyz   fffff    21      19      20   ...
pqr   hhhhh    30      21      13   ...

...    ...     ...     ...     ...

我想添加 date 明智的结果,然后动态添加 measure 列。
那么,有可能吗?如何在 Flex 中的度量后添加动态列?

DataGrid 有 属性 columns。它可用于动态设置列。参见示例:

var columns:Array = [];
var nameColumn:DataGridColumn = new DataGridColumn("name");
nameColumn.dataField = "name";
columns.push(nameColumn);
var measureColumn:DataGridColumn = new DataGridColumn("measure");
measureColumn.dataField = "measure";
columns.push(measureColumn);
var newColumn:DataGridColumn = new DataGridColumn("1-Aug");
newColumn.dataField = "1AugValue";
columns.push(newColumn);
...
dataGrid.columns = columns;

据我所知,当您需要更改列结构同时保留已经存在的列时,您需要创建新数组并再次声明已经存在的列。

这个怎么样?

// Get current columns here.
var cols: Array = grid.columns;

var col1:DataGridColumn = new DataGridColumn();
col1.headerText = "1-Aug";
col1.dataField = "foo";
cols.push(col1);

var col2:DataGridColumn = new DataGridColumn();
col2.headerText = "2-Aug";
col2.dataField = "baz";
cols.push(col2);

grid.columns = cols;

如果您想从 8 月 1 日添加到 8 月 31 日,并且这些数据字段类似于 val1~val31,这个怎么样?

var cols: Array = grid.columns;
for (var i:int=1; i<=31;i++){
    var col:DataGridColumn = new DataGridColumn();
    col.headerText = i.toString()+"-Aug";
    col.dataField = "val"+i.toString();
    cols.push(col);
}
grid.columns = cols;

如果你想添加其他月份,你应该从日历中获取而不是静态的 31 值。

更新: 2015 年 10 月 1 日 16:40(日本标准时间)

对于spark.DataGrid,和mx.DataGrid有一点不同。
这是 spark.DataGrid.

的代码
// Get current columns here.
var list: ArrayList = grid.columns as ArrayList;
var cols: Array = list.source;

var col: GridColumn = new GridColumn();
col.headerText = "1-Aug";
col.dataField = "foo";
cols.push(col);

// Redefine columns.
grid.columns = new ArrayList(cols);

<s:DataGrid id="grid">
    <s:columns>
        <s:ArrayList>
            <s:GridColumn dataField="type" width="100"/>
            <s:GridColumn dataField="name" width="100"/>
        </s:ArrayList>
    </s:columns>
</s:DataGrid>