如何在ExtJS4.0中将网格导出到XLS

时间:2012-12-07 23:51:35

标签: extjs

是否有一种简单的方法可以将网格数据导出到ExtJS中的XLS。

如果不是,我正在尝试以下方式。

我正在尝试读取控制器内的数据存储。数据存储已被网格使用。我想在按钮上单击读取数据并通过AJAX将其发送到服务器。稍后在服务器内部,我将检索数据并写入XLS。在这种情况下,我可以读取控制器内的数据的方式是什么?

在这里输入代码

Ext.define("MyApp.controller.GridController", {
extend : 'Ext.app.Controller',
views: ['performance.grid.PerformanceGrid'],
models: ['GridModel'],
stores: ['GridStore'],
refs : [{
    ref : 'mainTabPanel',
    selector : 'portal > tabpanel'
}],
init : function() {
     this.control({
         'portal toolbar > button[itemId=xls]' : {
             click : this.onAddTab
         },

         'portal toolbar > button[itemId=pdf]' : {
             click : this.onAddPortlet
         }
     });
},
onAddTab : function(btn, e) {
   // I want to read the datastore here and make an AJAX call
 },

});

2 个答案:

答案 0 :(得分:0)

onAddTab: function(btn, e){
   var store = // get the store reference probably doing Ext.getStore('the store');
   var records = store.data.items.map(function(r){ return r.data });

   // send it all to your server as you want to
   // Ext.ajax.Request({
   //    url: 'the url',
   //    data: records,
   //    method: 'POST'
   // });
});

我没有测试它但它必须工作。 祝你好运!

答案 1 :(得分:0)

我认为这个过程不是最好的,因为你将有3个有效载荷(数据往返没有任何意义)

  1. 您的服务器方法调用将获取将填充到网格中的数据。

  2. JSON对象(包含服务器数据)将再次传送到服务器

      
        

    这对我没有感觉......为什么在服务器有源时你想将数据发送给服务器?

      
  3. 服务器将处理您对象的JSON响应,然后即时创建文档并将其发送回服务器。
  4.   

    我认为你应该做的是以下几点:

    1. 从服务器获取数据并绑定网格。
    2. 获取store proxy URL并解析方法和extraParams,以便了解谁为网格服务以及您向服务器询问了什么。
    3. 在收到common methodmethod的服务器上创建array of parameters。然后在这个方法中根据方法制作逻辑,你可以调用你的数据存储库(第一个请求得到数据的存储库),处理文档并将文件发送回服务器。
    4. 这样你应该有这样的东西:

      webmethod(string method, object[] params) {
      
         switch(method){
            case "GetTestGridData":
                 // here you call your Repository in order to get the same data 
                 GeneralRepo repo = new GeneralRepo();
                 var data = repo.GetTestGridData(object[0],object[1]); 
      
               break;
         }
      
         byte[] fileStream = Reports.Common.Generate(data, ExportType.PDF);
         // response the stream to client...
      
      }