`
zjnicholas
  • 浏览: 36692 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

GridExporter

阅读更多
Ext.ns('Ext.ux.grid');

/**
 * Plugin (ptype = 'gridexporter') that adds export functionality for the grid.
 * 
 * @class Ext.ux.grid.GridExporter
 * @extends Ext.util.Observable
 * @author 
 * @version $Id: GridExporter.js 21171 2010-03-19 06:33:11Z $
 * @ptype gridexporter
 */
Ext.ux.grid.GridExporter = Ext.extend(Ext.util.Observable, {

  mode : 'local', // 'relay','remote'

  mask : true,

  confirmExportRows : 1000,

  maxExportRows : 0,

  maskMsg : '导出中,请稍候……',

  constructor : function(config) {
    Ext.apply(this, config);

    this.addEvents(
    /**
     * @event beforeexport
     */
    'beforeexport',
    /**
     * @event export
     */
    'export',
    /**
     * @event exportexception
     */
    'exportexception');

    Ext.ux.grid.GridExporter.superclass.constructor.call(this);
  },

  init : function(grid) {
    this.grid = grid;

    Ext.apply(grid, {
      exportCsv : this.exportCsv.createDelegate(this),
      exportExcel : this.exportExcel.createDelegate(this),
      exportPdf : this.exportPdf.createDelegate(this)
    });
  },

  buildColumns : function(cm) {
    var columns = [];
    for ( var i = 0; i < cm.getColumnCount(); i++) {
      if (!(cm.isHidden(i) || cm.getColumnId(i) == 'numberer' || cm.getColumnId(i) == 'checker')) {
        var col = {
          header : cm.getColumnHeader(i),
          dataIndex : cm.getDataIndex(i),
          width : cm.getColumnWidth(i)
        }
        columns.push(col);
      }
    }
    return columns;
  },

  buildData : function(store, cm) {
    var data = [];

    for ( var j = 0, len = store.getCount(); j < len; j++) {
      var rec = store.getAt(j);
      var row = {};
      for ( var i = 0; i < cm.getColumnCount(); i++) {
        if (!(cm.isHidden(i) || cm.getColumnId(i) == 'numberer' || cm.getColumnId(i) == 'checker')) {
          var renderer = cm.getRenderer(i);
          var name = cm.getDataIndex(i);
          var value = rec.data[name];
          var p = {};
          try {
            value = renderer.call(cm.config[i], value, p, rec, j, i, store);
          } catch (err) {

          }
          if (typeof value === 'string') {
            value = value.replace(/<[^>]*>/g, '');
          }
          row[name] = value;
        }
      }
      data.push(row);
    }
    return data;
  },

  submitAsTarget : function(submitCfg) {
    var opt = submitCfg || {}, D = document;

    var form = opt.form || Ext.DomHelper.append(D.body, {
      tag : 'form',
      cls : 'x-hidden'
    });

    form = Ext.getDom(form.form || form, D);

    form.target = opt.target || '_self';
    form.method = opt.method || 'POST';
    form.action = opt.url || Ext.ux.grid.GridExporter.PATH;
    opt.encoding && (form.enctype = form.encoding = String(opt.encoding));

    var hiddens, hd;
    if (opt.params) {
      hiddens = [];
      var ps = typeof opt.params == 'string' ? Ext.urlDecode(params, false) : opt.params;
      for ( var k in ps) {
        if (ps.hasOwnProperty(k)) {
          hd = D.createElement('input');
          hd.type = 'hidden';
          hd.name = k;
          hd.value = ps[k];
          form.appendChild(hd);
          hiddens.push(hd);
        }
      }
    }
    (function() {
      form.submit();
      hiddens && Ext.each(hiddens, Ext.removeNode, Ext);
      Ext.fly(form, '_dynaForm').hasClass('x-hidden') && Ext.removeNode(form);
      this.grid.bwrap.unmask();
      this.fireEvent('export', this, submitCfg);
    }).defer(100, this);
  },

  exportGrid : function(exportCfg) {
    var opt = exportCfg || {};
    var grid = this.grid;
    if (grid && grid.getStore() && grid.getStore().getCount() > 0) {
      var confirmExportRows = opt.confirmExportRows || this.confirmExportRows || 0;
      var totalCount = grid.getStore().getTotalCount();
      if ((confirmExportRows > 0) && (totalCount > confirmExportRows)) {
        Ext.Msg.confirm('导出数量太多', '导出数量超过' + confirmExportRows + '条记录,可能导致速度缓慢。<br>是否终止导出,重新设置查询范围以减少导出数量?', function(btn, text) {
          if (btn == 'no') {
            return this.doExport(exportCfg);
          } else {
            return false;
          }
        }, this);
      } else {
        return this.doExport(exportCfg);
      }

    } else {
      Ext.Msg.alert('无法导出', '没有需要导出的数据');
      return false;
    }
  },

  doExport : function(exportCfg) {
    var opt = exportCfg || {};
    var maxExportRows = opt.maxExportRows || this.maxExportRows || 0;
    var totalCount = this.grid.getStore().getTotalCount();
    if ((maxExportRows > 0) && (totalCount > maxExportRows)) {
      Ext.Msg.confirm('导出数据限制', '只导出前' + maxExportRows + '条记录,是否继续?', function(btn, text) {
        if (btn == 'yes') {
          return this.exportData(exportCfg);
        } else {
          return false;
        }
      }, this);
    } else {
      return this.exportData(exportCfg);
    }

  },

  exportData : function(exportCfg) {
    var opt = exportCfg || {};
    var grid = this.grid;

    this.fireEvent('beforeexport', this, exportCfg);
    if (this.mask) {
      grid.bwrap.mask(this.maskMsg);
    }
    var mode = opt.mode || this.mode || 'local';
    var store = grid.getStore();

    var maxExportRows = opt.maxExportRows || this.maxExportRows || 0;
    var cm = grid.getColumnModel();
    var params = {
      format : opt.format || 'csv',
      filename : opt.filename || grid.title || 'export',
      columns : opt.columns || Ext.encode(this.buildColumns(cm)),
      maxExportRows : maxExportRows
    };
    if (mode == 'local') {
      params.data = Ext.encode(this.buildData(store, cm));
      this.submitAsTarget( {
        params : params
      });

    } else if (mode == 'remote') {
      params.remoteMethod = opt.remoteMethod || this.remoteMethod;
      var lastOptions = store.lastOptions || {};
      var p = lastOptions.params || {};
      if (p.dwrFunctionArgs) {
        p = p.dwrFunctionArgs[0];
      } else {
        p = Ext.apply( {}, p, store.baseParams);
      }
      p = opt.params || p || {};
      params.params = Ext.encode(p);
      this.submitAsTarget( {
        params : params
      });
    } else {
      if (!this.exportStore) {
        this.exportStore = new store.constructor( {
          proxy : store.proxy,
          reader : store.reader,
          listeners : {
            scope : this,
            load : function(ds, recs, opts) {
              params.data = Ext.encode(this.buildData(ds, cm));
              this.submitAsTarget( {
                params : params
              });
              ds.removeAll();
            },
            loadexception : function() {
              this.fireEvent('exportexception', this);
            }
          }
        });

      }

      var lastOptions = Ext.apply( {}, store.lastOptions, {
        params : {}
      });
      lastOptions.params.start = 0;
      lastOptions.params.limit = maxExportRows;
      if (lastOptions.params.dwrFunctionArgs) {
        lastOptions.params.dwrFunctionArgs[1] = 0;
        lastOptions.params.dwrFunctionArgs[2] = maxExportRows;
      }
      this.exportStore.load(lastOptions);
    }
  },

  exportPdf : function() {
    this.exportGrid( {
      format : "pdf"
    });
  },
  exportExcel : function() {
    this.exportGrid( {
      format : "excel"
    });
  },
  exportCsv : function() {
    this.exportGrid( {
      format : "csv"
    });
  },

  destroy : function() {
    if (this.exportStore) {
      Ext.destroy(this.exportStore);
    }
  }

});
if (Ext.version >= 3) {
  Ext.preg('gridexporter', Ext.ux.grid.GridExporter);
}
Ext.ux.grid.GridExporter.PATH = '/export.do';
分享到:
评论

相关推荐

    Ext grid导出excel

    支持Ext3 Ext4导出excel,客户端导出表格,支持各种主流浏览器。

    数据库实验.py

    数据库实验.py

    机器学习技术对心电图 (ECG) 信号进行分类matlab代码.zip

    1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    学会学习心理课拒绝诱惑:自制力培养手册.docx

    学会学习心理课拒绝诱惑:自制力培养手册.docx

    基于matlab+Simulink模拟的微电网系统包括包括电源、电力电子设备等+源码+开发文档(毕业设计&课程设计&项目开发)

    基于matlab+Simulink模拟的微电网系统包括包括电源、电力电子设备等+源码+开发文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用~ 项目简介: 这是一个完整的微电网模型,包括电源、电力电子设备、使用MatLab和Simulink的负载和电源模型。该模型基于费萨尔·穆罕默德的硕士论文《微网格建模与仿真》。 什么是微电网 模拟的微电网使用一组电源和负载在与任何集中式电网(宏电网)断开连接的情况下工作,并自主运行,为其局部区域提供电力。该仿真对微电网在稳态下进行建模,以分析其对输入变化的瞬态响应。 此模拟的目的 对系统进行全年模拟,测量负载、产量、电压和频率。 给出简化规划和资源评估阶段的方法。

    Translucent Image - Fast Blurred Background UI v4.4.1

    Unity插件 Translucent Image 可帮助你构建精美的模糊背景 UI,例如在 iOS/MacOS/Windows 10 Fluent 设计中的 UI。 与许多其他背景模糊解决方案不同,Translucent Image 采用一种对性能影响最小的高效算法,因此用户可以享受更高的帧速率和更长的电池寿命。不仅如此,当你将模糊调高时,它还可以产生完美的平滑效果,而其它资源在高度模糊时会呈现难看的块状图像。

    基于卷积神经网络的人脸识别(包括数据集)

    基于卷积神经网络的人脸识别卷积神经网络(Convolutional Neural Networks, CNNs 或 ConvNets)是一类深度神经网络,特别擅长处理图像相关的机器学习和深度学习任务。它们的名称来源于网络中使用了一种叫做卷积的数学运算。以下是卷积神经网络的一些关键组件和特性: 卷积层(Convolutional Layer): 卷积层是CNN的核心组件。它们通过一组可学习的滤波器(或称为卷积核、卷积器)在输入图像(或上一层的输出特征图)上滑动来工作。 滤波器和图像之间的卷积操作生成输出特征图,该特征图反映了滤波器所捕捉的局部图像特性(如边缘、角点等)。 通过使用多个滤波器,卷积层可以提取输入图像中的多种特征。 激活函数(Activation Function): 在卷积操作之后,通常会应用一个激活函数(如ReLU、Sigmoid或tanh)来增加网络的非线性。 池化层(Pooling Layer): 池化层通常位于卷积层之后,用于降低特征图的维度(空间尺寸),减少计算量和参数数量,同时保持特征的空间层次结构。 常见的池化操作包括最大池化(Max Pooling)和平均

    基于java进行的软件测试实验代码.zip

    基于java进行的软件测试实验代码.zip

    【优化求解】遗传算法求解多城市多应急物流中心选址问题【含Matlab源码 1724期】.zip

    【优化求解】遗传算法求解多城市多应急物流中心选址问题【含Matlab源码 1724期】.zip

    结构型设计模式(7种)

    结构型设计模式(7种)

    课设毕设基于SpringBoot+Vue的旧物置换网站 LW+PPT+源码可运行.zip

    课设毕设基于SpringBoot+Vue的旧物置换网站 LW+PPT+源码可运行.zip

    微信小程序源码 健康饮食助手 健康菜谱app 下载

    健康菜谱App是一款专为追求健康饮食生活的用户设计的应用程序。它提供了一系列精心挑选的营养食谱,旨在帮助用户做出美味又健康的餐点。以下是健康菜谱App的核心特点: 丰富食谱库:包含数百种健康食谱,涵盖早餐、午餐、晚餐及小吃等。 营养信息标注:每道食谱都配有详细的营养信息,包括卡路里、蛋白质等。 个性化推荐:根据用户的饮食习惯和健康目标,智能推荐合适的菜谱。 食材替换建议:提供食材替换选项,帮助用户根据自己的口味和需求调整食谱。 一键购物清单:自动生成购物清单,方便用户购买所需食材。 步骤图解:每道食谱都配有清晰的步骤图解,即使是烹饪新手也能轻松上手。 社区分享功能:用户可以在社区中分享自己的烹饪成果,交流烹饪心得。 无广告干扰:提供无广告的用户体验,让用户专注于烹饪和享受美食。 健康菜谱App是健康饮食追求者的得力助手,无论是健身爱好者、素食主义者还是普通家庭,都能找到适合自己的健康食谱。立即下载健康菜谱App,开启健康饮食新篇章!

    课设毕设基于SpringBoot+Vue的职称评审管理系统 LW+PPT+源码可运行.zip

    课设毕设基于SpringBoot+Vue的职称评审管理系统 LW+PPT+源码可运行.zip

    MikelProjectDemo-dev.zip

    MikelProjectDemo-dev

    基于 SpringBoot 开发的超简洁音乐播放器.zip

    基于springboot的java毕业&课程设计

    HUWEI eNSP课程作业

    HUWEI eNSP课程作业

    基于SpringBoot、SSH和Redis的NBA论坛网站.zip

    基于springboot的java毕业&课程设计

    基于SpringBoot的Java旅游APP.zip

    基于springboot的java毕业&课程设计

    微信小程序设计-教育培训.rar

    微信小程序设计之相关行业源码及图文导入教程

    Unity完整小游戏-贪吃蛇(Unity 2D实现版)

    在 Unity 中创建一个简单的“贪吃蛇”游戏是一个很好的练习项目,可以帮助理解 Unity 的基本组件和工作流程。要在Unity中实现一个完整的2D贪吃蛇游戏,需要遵循一系列步骤来创建游戏场景、角色、食物、游戏逻辑和用户界面。

Global site tag (gtag.js) - Google Analytics