Code:
var store = new Ext.data.SimpleStore({
data: [
['Value 1', 'text', 'text'],
['Value 2', 'number', 1],
['Value 3', 'date', new Date()]
],
fields: ['name', 'type', 'value']
});
var comboStore = new Ext.data.SimpleStore({
id: 0,
data: [
['text', 'Text'],
['number', 'Number'],
['date', 'Date']
],
fields: ['type', 'name']
});
var typeEditor = new Ext.form.ComboBox({
store: comboStore,
mode: 'local',
triggerAction: 'all',
valueField: 'type',
displayField: 'name',
editable: false
});
var typeRenderer = function(value) {
var rec = comboStore.getById(value);
return rec ? rec.get('name') : '';
}
var colModel = new Ext.grid.ColumnModel({
columns: [
{header: 'Name', dataIndex: 'name', sortable: true, editor: new Ext.form.TextField({})},
{header: 'Type', dataIndex: 'type', sortable: true, renderer: typeRenderer, editor: typeEditor},
{header: 'Value', dataIndex: 'value', sortable: true, editable: true}
],
editors: {
'text': new Ext.grid.GridEditor(new Ext.form.TextField({})),
'number': new Ext.grid.GridEditor(new Ext.form.NumberField({})),
'date': new Ext.grid.GridEditor(new Ext.form.DateField({}))
},
getCellEditor: function(colIndex, rowIndex) {
var field = this.getDataIndex(colIndex);
if (field == 'value') {
var rec = store.getAt(rowIndex);
return this.editors[rec.get('type')];
}
return Ext.grid.ColumnModel.prototype.getCellEditor.call(this, colIndex, rowIndex);
}
});
var grid = new Ext.grid.EditorGridPanel({
ds: store,
cm: colModel
});
Ext.onReady(function(){
new Ext.Viewport({
layout: 'fit',
items: [grid]
});
});