2015-09-03 129 views
1

我在我的系統中有<mx:DataGrid>,如下所示。Flex中的動態數據網格列

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

它有兩列,namemeasure。我想添加另外的列數,它是關於measure的datagrid中的數據。

所以,它看起來像:

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中測量後添加動態列?

回答

1

這個怎麼樣?

// 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; 

如果你想從1月8日到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(JST)

對於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> 
+0

這比我的解決方案更好,因爲你正在重複使用常規列,而我又一次宣佈它們。 –

+0

謝謝,這可能與火花datagrid? – ketan

+0

@ketan我更新了spark數據網格的答案。 –

0

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; 

據我知道,當你需要改變立柱結構,同時保持列,已經存在,你需要創建新的陣列,並再次聲明已經存在的列。

+0

不,'name,measure'列已經存在。只是想動態添加無限數量的「日期」列。 – ketan

+0

填充'columns'屬性使'DataGrid'根據提供的數組重新創建列。所以,如果你說,只提供「8月1日」專欄,你實際上會放寬「名稱」和「測量」欄。如果您只希望添加「1-Aug」列,而不是觸摸「name」和「measure」列,那麼我會說這是不可能的。 –

+0

但是有動態的日期列數。爲此,我需要把它放到循環中。 – ketan