【问题标题】:Extjs3.4 Get all data from grid store which more than 1 pageExtjs3.4 从网格存储中获取超过 1 页的所有数据
【发布时间】:2013-11-18 17:42:46
【问题描述】:

如何从超过 1 页的网格中获取所有数据?

我设置为一页只显示 50 条记录,但我的总数据最多为 52 条记录,它们存储在 2 页中。


我可以知道如何从这 2 个页面获取所有数据吗?

下面是只能获取一页数据的代码...

ExportButtonTestJS = Ext.extend(One.Report, {
    reportName: 'ExportButtonTestRpt',
    autoExecute: true,
    isDetailPage: false,
    listeners: {
        bbarconfig: function(report, bbarConfig) {
          bbarConfig.items.push({
            xtype: 'button',
            text: 'Export',
            disabled: false,
            onClick : function () {
                console.log(report.grid.getStore().data.items);
                }
          });
        }
    }
});

【问题讨论】:

    标签: extjs extjs3


    【解决方案1】:

    遇到了同样的问题,我必须这样做才能从所有页面获取数据:

    var grid = Ext.getCmp('myGrid');    
    
    //store current pageSize
    var currentPageSize = grid.getBottomToolbar().pageSize;
    
    var store = grid.getStore();     // store from grid 
    
    //reload store with total nº of records     
    store.reload({params:{start:0,limit:store.getTotalCount()}});
    
    //once the grid is reloaded with all records, then do whatever you need.
    store.on('load', function(store, recs, opt){
    
          var selected = store.getRange();  // getRange = get all records
    
          //this iterates over all records
          Ext.each(selected, function(item) {
               process here;
          }, this);
    
          //once you finished processing, reload grid with previous pageSize
          store.reload({params:{start:0,limit:currentPageSize}});
    }, this, {single: true}); //single:true says this event will only trigger once
    

    希望这对任何人都有帮助,我花了一些时间来完成这项工作。

    【讨论】:

      【解决方案2】:

      Ext.data.store 的默认页面大小为 50。因此,即使存储中的数据超过 50 条记录(例如 400 条),任何时候也只有 50 条记录会存储在 Ext.store 中。一旦我们进入下一页,接下来的 51 到 100 条记录将被存储在 store 中。

      两种解决方案满足您的要求:

      1. 根据需要增加 pageSize -- 例如:pageSize:500
      2. 在 Ext.data.store 中设置 buffered:true

      在设置buffered:true时,您可以使用grid.store.getRange(start, end)一次获取商店的所有记录。但是在这种情况下,您需要第一次加载商店。

      【讨论】:

        【解决方案3】:

        不要尝试直接访问项目。为此使用 store 方法。

        试试report.grid.getStore().getRange()

        http://docs.sencha.com/extjs/4.1.3/#!/api/Ext.data.Store-method-getRange

        【讨论】:

        • 我试过 report.grid.getStore().getRange(1,52) 但它只能显示到 50 条记录,我做错了吗?
        • 你的服务器端实现分页了吗?是退回 50 件还是全部?
        猜你喜欢
        • 2015-02-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-15
        • 1970-01-01
        • 2019-03-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多