Thank you for patch, it works! But there is something strange. Firstly, I change code like this:

Code:
// View has changed, may be a full refresh or just a single row
    onViewChange: function () {
        var me = this,
            tpl = me.tpl;


        if (tpl.isCTemplate) {
            // No need to wait for the polling, the sooner we inject the less painful it is
            tpl.injectComponents();
        }


        // A view change could mean scrollbar problems
        me.redoScrollbars();


        me.performGC();
        //Patch for 4.1.1
        Ext.Function.createBuffered(function() {
        this.up('tablepanel').updateLayout();
    }, 10)
        //end patch
    },


and nothing is change...After tha I try this :

Code:
// View has changed, may be a full refresh or just a single row
    onViewChange: function () {
        var me = this,
            tpl = me.tpl;


        if (tpl.isCTemplate) {
            // No need to wait for the polling, the sooner we inject the less painful it is
            tpl.injectComponents();
        }


        // A view change could mean scrollbar problems
        me.redoScrollbars();


        me.performGC();
        //Patch for 4.1.1
        this.updateGridLayout();
        //end patch
    },
    //Patch for 4.1.1
    updateGridLayout: Ext.Function.createBuffered(function() {
        this.up('tablepanel').updateLayout();
    }, 10),
    //end patch


and Grid become resize correctly.

In addition, after updating a page, on millisecond it's possible to notice that firstly Grid show all raws, after that Grid hide some rows, and patch force it to show raws again. It could be a way to fix bug without UpdateLayout, doesn't it ? I think the reason is in hiding raws