Results 1 to 5 of 5

Thread: Cannot set CheckboxSelectionModel for lockable Grid

  1. #1
    Ext JS Premium Member
    Join Date
    Jun 2011
    Location
    Ottawa, Ontario, Canada
    Posts
    123
    Answers
    4
    Vote Rating
    1
      0  

    Default Answered: Cannot set CheckboxSelectionModel for lockable Grid

    I had everything working fine with CheckboxSelectionModel until I set one column locked. Now it doesn't display selection checkboxes. Any suggestions will be appreciated.

    Thanks

  2. Ok... there was a bug with checkbox model and reconfigure that was fixed. This fix will be in 4.1.0 beta (the next release)

  3. #2
    Sencha - Sr Software Engineer mitchellsimoens's Avatar
    Join Date
    Mar 2007
    Location
    Gainesville, FL
    Posts
    39,556
    Answers
    3931
    Vote Rating
    1272
      0  

    Default

    What version are you using? I just tested in 4.0.7 and on our local 4.1.0 branch and added selType : 'checkboxmodel' to the locking grid example and it works just fine.
    Mitchell Simoens @LikelyMitch
    Sencha Inc, Senior Software Engineer
    ________________
    Learn BBCode and use it! Checkout the CODE tag!

    Check out my GitHub, lots of nice things for Ext JS and Sencha Touch
    https://github.com/mitchellsimoens

  4. #3
    Ext JS Premium Member
    Join Date
    Jun 2011
    Location
    Ottawa, Ontario, Canada
    Posts
    123
    Answers
    4
    Vote Rating
    1
      0  

    Default the problem is in reconfigure

    I was surprised too when I tried with your locking-grid example. Until I found out that this is reconfigure that screws things up.
    Try this code instead of your locking-grid.js
    Code:
    /*
    
    
    This file is part of Ext JS 4
    
    
    Copyright (c) 2011 Sencha Inc
    
    
    Contact:  http://www.sencha.com/contact
    
    
    Commercial Usage
    Licensees holding valid commercial licenses may use this file in accordance with the Commercial Software License Agreement provided with the Software or, alternatively, in accordance with the terms contained in a written agreement between you and Sencha.
    
    
    If you are unsure which license is appropriate for your use, please contact the sales department at http://www.sencha.com/contact.
    
    
    */
    Ext.require([
        'Ext.grid.*',
        'Ext.data.*',
        'Ext.util.*',
        'Ext.state.*'
    ]);
    
    
    Ext.onReady(function() {
        Ext.QuickTips.init();
    
    
        // sample static data for the store
        var myData = [
            ['3m Co',                               71.72, 0.02,  0.03,  '9/1 12:00am'],
            ['Alcoa Inc',                           29.01, 0.42,  1.47,  '9/1 12:00am'],
            ['Altria Group Inc',                    83.81, 0.28,  0.34,  '9/1 12:00am'],
            ['American Express Company',            52.55, 0.01,  0.02,  '9/1 12:00am'],
            ['American International Group, Inc.',  64.13, 0.31,  0.49,  '9/1 12:00am'],
            ['AT&T Inc.',                           31.61, -0.48, -1.54, '9/1 12:00am'],
            ['Boeing Co.',                          75.43, 0.53,  0.71,  '9/1 12:00am'],
            ['Caterpillar Inc.',                    67.27, 0.92,  1.39,  '9/1 12:00am'],
            ['Citigroup, Inc.',                     49.37, 0.02,  0.04,  '9/1 12:00am'],
            ['E.I. du Pont de Nemours and Company', 40.48, 0.51,  1.28,  '9/1 12:00am'],
            ['Exxon Mobil Corp',                    68.1,  -0.43, -0.64, '9/1 12:00am'],
            ['General Electric Company',            34.14, -0.08, -0.23, '9/1 12:00am'],
            ['General Motors Corporation',          30.27, 1.09,  3.74,  '9/1 12:00am'],
            ['Hewlett-Packard Co.',                 36.53, -0.03, -0.08, '9/1 12:00am'],
            ['Honeywell Intl Inc',                  38.77, 0.05,  0.13,  '9/1 12:00am'],
            ['Intel Corporation',                   19.88, 0.31,  1.58,  '9/1 12:00am'],
            ['International Business Machines',     81.41, 0.44,  0.54,  '9/1 12:00am'],
            ['Johnson & Johnson',                   64.72, 0.06,  0.09,  '9/1 12:00am'],
            ['JP Morgan & Chase & Co',              45.73, 0.07,  0.15,  '9/1 12:00am'],
            ['McDonald\'s Corporation',             36.76, 0.86,  2.40,  '9/1 12:00am'],
            ['Merck & Co., Inc.',                   40.96, 0.41,  1.01,  '9/1 12:00am'],
            ['Microsoft Corporation',               25.84, 0.14,  0.54,  '9/1 12:00am'],
            ['Pfizer Inc',                          27.96, 0.4,   1.45,  '9/1 12:00am'],
            ['The Coca-Cola Company',               45.07, 0.26,  0.58,  '9/1 12:00am'],
            ['The Home Depot, Inc.',                34.64, 0.35,  1.02,  '9/1 12:00am'],
            ['The Procter & Gamble Company',        61.91, 0.01,  0.02,  '9/1 12:00am'],
            ['United Technologies Corporation',     63.26, 0.55,  0.88,  '9/1 12:00am'],
            ['Verizon Communications',              35.57, 0.39,  1.11,  '9/1 12:00am'],
            ['Wal-Mart Stores, Inc.',               45.45, 0.73,  1.63,  '9/1 12:00am']
        ];
    
    
        /**
         * Custom function used for column renderer
         * @param {Object} val
         */
        function change(val) {
            if (val > 0) {
                return '<span style="color:green;">' + val + '</span>';
            } else if (val < 0) {
                return '<span style="color:red;">' + val + '</span>';
            }
            return val;
        }
    
    
        /**
         * Custom function used for column renderer
         * @param {Object} val
         */
        function pctChange(val) {
            if (val > 0) {
                return '<span style="color:green;">' + val + '%</span>';
            } else if (val < 0) {
                return '<span style="color:red;">' + val + '%</span>';
            }
            return val;
        }
    
    
        // create the data store
        var store = Ext.create('Ext.data.ArrayStore', {
            fields: [
               {name: 'company'},
               {name: 'price',      type: 'float'},
               {name: 'change',     type: 'float'},
               {name: 'pctChange',  type: 'float'},
               {name: 'lastChange', type: 'date', dateFormat: 'n/j h:ia'}
            ],
            data: myData
        });
       var cc = true;
        // create the Grid
       var gridColumns1 = [{
          text     : 'Company Name',
          locked: true,
          width    : 200,
          sortable : false,
          dataIndex: 'company'
       },{
          text     : 'Price',
          locked: true,
          width    : 125,
          sortable : true,
          renderer : 'usMoney',
          dataIndex: 'price'
       },{
          text     : 'Change',
          width    : 125,
          sortable : true,
          renderer : change,
          dataIndex: 'change'
       },{
          text     : '% Change',
          width    : 125,
          sortable : true,
          renderer : pctChange,
          dataIndex: 'pctChange'
       },{
          text     : 'Last Updated',
          width    : 135,
          sortable : true,
          renderer : Ext.util.Format.dateRenderer('m/d/Y'),
          dataIndex: 'lastChange'
       }];
       var gridColumns = [{
          text     : 'Company Name',
          locked: true,
          width    : 200,
          sortable : false,
          dataIndex: 'company'
       },{
          text     : 'Price',
          locked: true,
          width    : 125,
          sortable : true,
          renderer : 'usMoney',
          dataIndex: 'price'
       },{
          text     : 'Change',
          width    : 125,
          sortable : true,
          renderer : change,
          dataIndex: 'change'
       },{
          text     : '% Change',
          width    : 125,
          sortable : true,
          renderer : pctChange,
          dataIndex: 'pctChange'
       },{
          text     : 'Last Updated',
          width    : 135,
          sortable : true,
          renderer : Ext.util.Format.dateRenderer('m/d/Y'),
          dataIndex: 'lastChange'
       },{
          text: 'Extra Column'
       }];
       var grid = Ext.create('Ext.grid.Panel', {
          store: store,
          columnLines: true,
          lockable: true,
          selModel: Ext.create('Ext.selection.CheckboxModel'),
          tbar: [
             {xtype: 'button', text: 'Reconfigure', handler: function () {
                if (cc)
                {
                   grid.reconfigure(null, gridColumns1);
                }  else
                {
                   grid.reconfigure(null, gridColumns);
                }
                cc = !cc;
             }}
          ],
          columns: gridColumns,
          height: 350,
          width: 600,
          title: 'Locking Grid Column',
          renderTo: 'grid-example',
          viewConfig: {
              stripeRows: true
          }
        });
    });

  5. #4
    Sencha - Sr Software Engineer mitchellsimoens's Avatar
    Join Date
    Mar 2007
    Location
    Gainesville, FL
    Posts
    39,556
    Answers
    3931
    Vote Rating
    1272
      0  

    Default

    Ok... there was a bug with checkbox model and reconfigure that was fixed. This fix will be in 4.1.0 beta (the next release)
    Mitchell Simoens @LikelyMitch
    Sencha Inc, Senior Software Engineer
    ________________
    Learn BBCode and use it! Checkout the CODE tag!

    Check out my GitHub, lots of nice things for Ext JS and Sencha Touch
    https://github.com/mitchellsimoens

  6. #5
    Ext JS Premium Member
    Join Date
    Jun 2011
    Location
    Ottawa, Ontario, Canada
    Posts
    123
    Answers
    4
    Vote Rating
    1
      0  

    Default I created very hacky override for myself for now.

    Code:
    /*
    Hack for lockable grid reconfigure so it does keep checkbox selection model going
     */
    Ext.override(Ext.grid.Lockable, {
       reconfigureLockable: function(store, columns) {
          var me = this,
             lockedGrid = me.lockedGrid,
             normalGrid = me.normalGrid;
    
    
          if (columns) {
             lockedGrid.headerCt.suspendLayout = true;
             normalGrid.headerCt.suspendLayout = true;
    
    
             // hack keeping checkbox column
             for (var i = (lockedGrid.headerCt.items.items.length - 1); i > 0; i--) {
                lockedGrid.headerCt.remove(lockedGrid.headerCt.items.items[i]);
             }
    
    
             normalGrid.headerCt.removeAll();
    
    
             columns = me.processColumns(columns);
    
    
             lockedGrid.headerCt.add(columns.locked);
             normalGrid.headerCt.add(columns.normal);
             me.syncLockedWidth();
          }
    
    
          if (store) {
             store = Ext.data.StoreManager.lookup(store);
             me.store = store;
             lockedGrid.bindStore(store);
             normalGrid.bindStore(store);
          } else {
             lockedGrid.getView().refresh();
             normalGrid.getView().refresh();
          }
    
    
          if (columns) {
             lockedGrid.headerCt.suspendLayout = false;
             normalGrid.headerCt.suspendLayout = false;
             lockedGrid.headerCt.forceComponentLayout();
             normalGrid.headerCt.forceComponentLayout();
          }
       }
    
    
    });

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •