2015-09-03 3 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> 

Она имеет две колонки, name и measure. Я хочу добавить еще несколько столбцов, и это данные в datagrid по отношению к 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?

ответ

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-Aug 31-Aug, и эти DataField, как 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.

Обновление: 1 октября 2015 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 Я обновил ответ для искры datagrid. –

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' статичны уже там. Просто хочу добавить бесконечное количество динамических столбцов 'date'. – ketan

+0

Заполнение свойства 'columns' заставляет' DataGrid' воссоздавать свои столбцы в соответствии с предоставленным массивом. Поэтому, если вы, скажем, предоставляете только столбец «1-Aug», вы фактически потеряете столбцы «имя» и «измерение». Если вы хотите добавить столбец «1-Aug» и не касаться столбцов «имя» и «измерение», я бы сказал, что это невозможно. –

+0

Но есть динамическое число столбцов даты. Для этого мне нужно поставить его в цикл. – ketan

Смежные вопросы