如何在 slickgrid 中动态添加列?
How to add columns dynamically in slickgrid?
我正在尝试通过遍历 javascript 数组对象将动态列添加到 slickgrid。
js数组中对象的格式为:
auditor = {"firstName":"test audit manager","lastName":".","middleName":null,"partyId":"11140"}
var columns = [];
/*from the ajax result, I'm obtaining 'auditors' js array */
for (var key in auditors) {
var auditor = auditors[key];
var name = auditor["firstName"];
if(auditor["middleName"]){
name += auditor["middleName"];
}
if(auditor["lastName"]){
name += auditor["lastName"];
}
if(auditors[parseInt(key)+parseInt(1)]){
columns = columns += '{id: '+'"auditor_'+key+'", name: '+'"'+name+'"'+', field: '+'"auditor_'+key+'", editor: Slick.Editors.Text, width:80, minWidth:80, sortable:true, focusable:false},';
}
else{
columns = columns += '{id: '+'"auditor_'+key+'", name: '+'"'+name+'"'+', field: '+'"auditor_'+key+'", editor: Slick.Editors.Text, width:80, minWidth:80, sortable:true, focusable:false}';
}
}//end for loop
columns.replace(/\\//g, "/");
var options = {
enableCellNavigation: true,
enableColumnReorder: false,
editable: true,
forceFitColumns: false,
enableCellNavigation: true,
//enableAddRow: true,
asyncEditorLoading: false,
autoEdit: true,
secondaryHeaderRowHeight: 25
};
$(function () {
grid = new Slick.Grid("#myGrid", data, columns, options);
grid.setSelectionModel(new Slick.CellSelectionModel());
var columnpicker = new Slick.Controls.ColumnPicker(columns, grid, options);
grid.onAddNewRow.subscribe(function (e, args) {
var item = args.item;
grid.invalidateRow(data.length);
data.push(item);
grid.updateRowCount();
grid.render();
});
});
您在顶部正确地将 columns
声明为一个数组,但随后您向其中添加了字符串值。使用.push
向数组添加一个元素,值不能是字符串。
类似于:
columns.push(
{
id: "auditor_" + key,
name: name,
field: "auditor_"+ key,
editor: Slick.Editors.Text,
width:80,
minWidth:80,
sortable:true,
focusable:false
}
);
那么显然你的 .replace()
必须在数组的元素上完成,或者在为数组赋值之前完成。
我正在尝试通过遍历 javascript 数组对象将动态列添加到 slickgrid。
js数组中对象的格式为:
auditor = {"firstName":"test audit manager","lastName":".","middleName":null,"partyId":"11140"}
var columns = [];
/*from the ajax result, I'm obtaining 'auditors' js array */
for (var key in auditors) {
var auditor = auditors[key];
var name = auditor["firstName"];
if(auditor["middleName"]){
name += auditor["middleName"];
}
if(auditor["lastName"]){
name += auditor["lastName"];
}
if(auditors[parseInt(key)+parseInt(1)]){
columns = columns += '{id: '+'"auditor_'+key+'", name: '+'"'+name+'"'+', field: '+'"auditor_'+key+'", editor: Slick.Editors.Text, width:80, minWidth:80, sortable:true, focusable:false},';
}
else{
columns = columns += '{id: '+'"auditor_'+key+'", name: '+'"'+name+'"'+', field: '+'"auditor_'+key+'", editor: Slick.Editors.Text, width:80, minWidth:80, sortable:true, focusable:false}';
}
}//end for loop
columns.replace(/\\//g, "/");
var options = {
enableCellNavigation: true,
enableColumnReorder: false,
editable: true,
forceFitColumns: false,
enableCellNavigation: true,
//enableAddRow: true,
asyncEditorLoading: false,
autoEdit: true,
secondaryHeaderRowHeight: 25
};
$(function () {
grid = new Slick.Grid("#myGrid", data, columns, options);
grid.setSelectionModel(new Slick.CellSelectionModel());
var columnpicker = new Slick.Controls.ColumnPicker(columns, grid, options);
grid.onAddNewRow.subscribe(function (e, args) {
var item = args.item;
grid.invalidateRow(data.length);
data.push(item);
grid.updateRowCount();
grid.render();
});
});
您在顶部正确地将 columns
声明为一个数组,但随后您向其中添加了字符串值。使用.push
向数组添加一个元素,值不能是字符串。
类似于:
columns.push(
{
id: "auditor_" + key,
name: name,
field: "auditor_"+ key,
editor: Slick.Editors.Text,
width:80,
minWidth:80,
sortable:true,
focusable:false
}
);
那么显然你的 .replace()
必须在数组的元素上完成,或者在为数组赋值之前完成。