I created an updated version of Ext.ux.CheckColumn for this, just include this code after you include the extjs code:
Ext.define('Ext.ux.CheckColumn', { extend: 'Ext.grid.column.Column', alias: 'widget.checkcolumn', disableColumn: false, disableFunction: null, disabledColumnDataIndex: null, columnHeaderCheckbox: false, constructor: function(config) { var me = this; if(config.columnHeaderCheckbox) { var store = config.store; store.on("datachanged", function(){ me.updateColumnHeaderCheckbox(me); }); store.on("update", function(){ me.updateColumnHeaderCheckbox(me); }); config.text = me.getHeaderCheckboxImage(store, config.dataIndex); } me.addEvents( 'beforecheckchange', 'checkchange' ); me.callParent(arguments); }, updateColumnHeaderCheckbox: function(column){ var image = column.getHeaderCheckboxImage(column.store, column.dataIndex); column.setText(image); }, toggleSortState: function(){ var me = this; if(me.columnHeaderCheckbox) { var store = me.up('tablepanel').store; var isAllChecked = me.getStoreIsAllChecked(store, me.dataIndex); store.each(function(record){ record.set(me.dataIndex, !isAllChecked); record.commit(); }); } else me.callParent(arguments); }, getStoreIsAllChecked: function(store, dataIndex){ var allTrue = true; store.each(function(record){ if(!record.get(dataIndex)) allTrue = false; }); return allTrue; }, getHeaderCheckboxImage: function(store, dataIndex){ var allTrue = this.getStoreIsAllChecked(store, dataIndex); var cssPrefix = Ext.baseCSSPrefix, cls = [cssPrefix + 'grid-checkheader']; if (allTrue) { cls.push(cssPrefix + 'grid-checkheader-checked'); } return '<div class="' + cls.join(' ') + '"> </div>' }, processEvent: function(type, view, cell, recordIndex, cellIndex, e) { if (type == 'mousedown' || (type == 'keydown' && (e.getKey() == e.ENTER || e.getKey() == e.SPACE))) { var record = view.panel.store.getAt(recordIndex), dataIndex = this.dataIndex, checked = !record.get(dataIndex), column = view.panel.columns[cellIndex]; if(!(column.disableColumn || record.get(column.disabledColumnDataIndex) || (column.disableFunction && column.disableFunction(checked, record)))) { if(this.fireEvent('beforecheckchange', this, recordIndex, checked, record)) { record.set(dataIndex, checked); this.fireEvent('checkchange', this, recordIndex, checked, record); } }
then an example of setting a flag column would be:
{ xtype: "checkcolumn", columnHeaderCheckbox: true,//this setting is necessary for what you want store: (you need to put the grids store here), sortable: false, hideable: false, menuDisabled: true, dataIndex: "value_flag", listeners: { checkchange: function(column, rowIndex, checked){ //code for whatever on checkchange here } } }
It looks like: 