Question

I noticed that a user cannot hide all columns in a gridpanel. It seems that the grid must at least display one column. I can imagine this is a nice feature, but it doesn't work quite as I expected when dealing with both hideable and non-hideable columns. It seems that the rule is that at least one hideable column is required to display, even if there is a non-hideable column in the grid.

It doesn't make sense to me to not allow hiding of all hideable columns when at least one non-hideable column is displayed. Is this behaviour configurable?

I created a demo based on the Stateful Array Grid Example showing the problem:
http://jsfiddle.net/p9zqK/

var grid = Ext.create('Ext.grid.Panel', {
store: store,
stateful: true,
stateId: 'stateGrid',
columns: [
    {
        text     : 'Company',
        flex     : 1,
        sortable : false,
        hideable : false,
        dataIndex: 'company'
    },
    {
        text     : 'Price',
        width    : 75,
        sortable : true,
        renderer : 'usMoney',
        dataIndex: 'price'
    },
...
Was it helpful?

Solution

A simple hack is to allow all columns to be hidden unconditionally (in my application I don't bother about checking whether hideable columns exist, because I know they do...)

Ext.override(Ext.grid.header.Container,
{
    updateMenuDisabledState: function()
    {
        var me = this,
        result = me.getLeafMenuItems(),
        total = result.checkedCount,
        items = result.items,
        len = items.length,
        i = 0,
        rootItem = me.getMenu().child('#columnItem');

        //if (total <= 1)
        if (total <= 0) /* Allow all columns to be hidden unconditionally */
        {
            me.disableMenuItems(rootItem, Ext.ComponentQuery.query('[checked=true]', items)[0]);
        }
        else
        {
            for (; i < len; ++i)
            {
                me.setMenuItemState(total, rootItem, items[i]);
            }
        }
    }
});
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top