How to set editor for a column programmatically in a grid

extjs, extjs-grid, extjs4.2

Solution

Check out the docs for `getEditor()` on `Ext.grid.column.Column`. If you are using an Editing plugin, the plugin provides implementation for `getEditor()`, as well as `setEditor()`. Based on column being edited and any custom logic you implement, you could implement a custom `getEditor()` method to return whatever editor instance you want based on the circumstances.

The documentation says:

getEditor( record, defaultField ) : Ext.form.field.Field

This really tells a small part of the truth.

- `getEditor` is not only a method of `Ext.grid.column.Column`, but also a config option.

- If `getEditor` is defined as config option function get's called as `getEditor( record )` and needs to return a `Ext.grid.CellEditor`.

- This will work with the cellediting plugin, but not with the rowediting plugin.

Here is an example of a column configuration. It will create a combobox only on selected rows :

columns: [{
    text: 'Action', dataIndex: 'action', 
    getEditor: function(record){
        if( my logic ){
            return Ext.create('Ext.grid.CellEditor', {
                field: Ext.create( 'Ext.form.field.ComboBox', {
                    forceSelection: true,
                    store: [[1, 'Option 1'], [2, 'Option 2']]
                })
            })
        } else return false;
    }
},

Problem

I have a `Ext.grid.Panel` with a set of columns. This grid is filtered, and depending on the filter I would like to define an editor for a column. My grid: ``` Ext.define('Mb.view.MyPanel', { extend: 'Ext.grid.Panel', columns: [ {text: 'Order #', dataIndex: 'id'}, {text: 'Action', dataIndex: 'type', renderer: function(value){ if(value == 'BP') return Lang._('Veuillez choisir') return '' } }, ``` Now I would like to do something like: ``` var panel = Mb.app.getView('MyPanel'); if (condition == true) { panel.getColumns[1].setEditor({ xtype: 'textfield', ... }) } ``` Obviously the methods `getColumns` and `setEditor` do not exist. I therefore need another method to activate an editor on that column. I didn't find a method to access the column definitions to modifiy them and to rerender the grid afterwards. Can you give me a hint in which direction to search ? Thanks.

Original source