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

3 つのペイロード (意味のないデータ ラウンド トリップ) があるため、このプロセスは最適ではないと思います。

  1. サーバー メソッドを呼び出して、グリッドに入力されるデータを取得します。

  2. 次に、JSON オブジェクト (サーバー データを含む) が再びサーバーに移動します。

    これは私には意味がありません...サーバーがソースであるのに、なぜサーバーにデータを送信したいのですか??

  3. サーバーは JSON 応答からオブジェクトを処理し、オンザフライでドキュメントを作成してサーバーに送り返します。

あなたがすべきだと思うことは次のとおりです。

  1. サーバーからデータを取得し、グリッドをバインドします。
  2. メソッドを取得してstore proxy URL解析すると、extraParams誰がグリッドにサービスを提供し、サーバーに何を要求したかがわかります。
  3. common methodを受信するサーバー上に を作成します。次に、このメソッド内でロジックを作成し、メソッドに応じて、データ リポジトリ (最初のリクエストがデータを取得した同じリポジトリ) を呼び出し、ドキュメントを処理し、ファイルをサーバーに送り返します。methodarray 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 に答える
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 に答える