1

有没有一种简单的方法可以将网格数据导出到 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
 },

});
4

2 回答 2

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'
   // });
});

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

于 2012-12-08T03:34:44.890 回答
0

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

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

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

    这对我来说没有意义......为什么当服务器是源时你想向服务器发送数据??

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

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

  1. 从服务器获取数据并绑定您的网格。
  2. 获取store proxy URL并解析方法,extraParams这样您就知道谁为网格提供服务以及您向服务器提出了什么要求。
  3. common method在服务器上创建一个接收 amethod和一个array of parameters. 然后在此方法中根据方法创建逻辑,调用您的数据存储库(您的第一个请求获取数据的相同存储库),处理文档并将文件发送回服务器。

这样你应该有这样的东西:

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...

}
于 2014-07-12T01:45:45.133 回答