3

如何从超过 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);
                }
          });
        }
    }
});
4

3 回答 3

6

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

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

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

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

于 2013-11-07T10:13:32.903 回答
2

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

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

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

于 2015-10-26T16:11:13.570 回答
1

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

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

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

于 2013-11-07T07:25:57.230 回答