2017-01-23 5 views
0

私はASP.net MVCソリューションを使用しており、jqGridを使用しています。より良いパフォーマンスを得るために、私はオプションとしてloadonce: falseを使用します。この方法で行う必要があります。残念ながら、jqGridではサポートされていないようです。loadonceオプションがfalseに設定されている場合、jqGrid export excelの問題

$(document).ready(function() { 
    $("#jqGrid").jqGrid(
     { 
      url: "/Student/GetStudents", 
      mtype: "GET", 
      datatype: "json", 
      contentType: "application/json; charset-utf-8", 

      jsonReader: { 
       root: "rows", 
       id: "StudentId", 
       repeatitems: false 
      }, 
      colNames: ['StudentId', 'FirstName', 'LastName'], 
      colModel: [ 
       { label: 'StudentId', name: 'Id', key: true, width: 75 }, 
       { label: 'FirstName', name: 'FirstName', width: 150 }, 
       { label: 'LastName', name: 'LastName', width: 150 }, 

      ], 
      viewrecords: true, 
      loadonce: false, 
      width: '100%', 
      height: 'auto', 
      rowNum: 20, 
      rowList: [20, 30, 50], 
      sortable: true, 
      sortname: 'Id', 
      pager: "#jqGridPager", 

      autoencode: true, 
      scroll: false, 
      pgbuttons: true, 
      autowidth: true, 
      shrinkToFit: false, 
      forceFit: false, 
      gridview: false, 
      height: '100%', 
      scrollrows: true, 
      page: 1, 
      //pagerpos: 'center', 
      toppager: true, 
      recordpos: 'right', 
      multiselect: true, 
      multiboxonly: true, 
      direction: 'rtl', 
      ignoreCase: true, 
      caption: "", 
      rownumbers: true 
     }); 
    $('#jqGrid').jqGrid('navGrid', '#jqGridPager', { 
     search: true, 
     searchtext: "Search", 
     edit: false, 
     add: false, 
     del: false, 
     excel: true, 
     refresh: false, 

    }, {}, {}, {}, { 
     closeOnEscape: true, 
     closeAfterSearch: true, 
     ignoreCase: true, 
     multipleSearch: false, 
     multipleGroup: false, 
     showQuery: false, 
     sopt: ['cn', 'eq', 'ne'], 
     defaultSearch: 'cn' 
    }) 
    $('#jqGrid').jqGrid('navButtonAdd', '#jqGridPager', { 
     caption: "Export to Excel", 
     //buttonicon: "ui-icon-disk", 
     buttonicon: "ui-icon-folder-open", 
     onClickButton: function() { 
      exportToExcel(); 
     }, 

    }); 
}); 
function exportToExcel(data, e) { 
    exportExcelFile(data); 
} 


function exportExcelFile() { 
    debugger; 

    var data = $('#jqGrid')[0].addLocalData(true); 
    var ua = window.navigator.userAgent; 
    var msie = ua.indexOf("MSIE"); 
    if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) { 
     frame1.document.open("txt/html", "replace"); 
     frame1.document.write(setTableOfData(data)); 
     frame1.document.close(); 
     frame1.focus(); 
     sa = frame1.document.execCommand("SaveAs", true, "text.xls"); 
    } else 
     $('#jqGrid').jqGrid('exportToExcel', { fileName: "exportedExcel.xls", navigator: true }); 
} 

function setTableOfData(data) { 
    var htmlString = '<table>'; 
    var header = '<tr><td>StudentId</td><td>FirstName</td><td>LastName</td></tr>'; 
    htmlString += header; 
    for (var i = 0; i < data.length; i++) { 
     var tag = '<tr><td>' + data[i].Id + '</td><td>' + data[i].FirstName + '</td><td>' + data[i].LastName + '</td></tr>'; 
     htmlString += tag; 
    } 
    htmlString += '</table>'; 
    return htmlString; 
} 
+0

商用の[Guriddo jqGrid JS](http://www.jqGrid.com)のjqGrid([free jqGrid](https://github.com/free-jqgrid/jqGrid) /guriddo.net/?page_id=103334)またはバージョン<= 4.7の古いjqGrid? 'loadonce:true'を使用する場合、jqGridの悪いパフォーマンスについて書きます。それは奇妙に聞こえる。表示する必要がある行の総数はいくつですか?あなたはサーバー上のデータを持っているので、サーバーコード*をExcelにエクスポートするほうが良いです。 [古い回答](http://stackoverflow.com/a/9349688/315935)と[this one](http://stackoverflow.com/a/13957161/315935)を参照してください。 – Oleg

+0

現在、私はjqGridのバージョン4.4を使用していますが、私はそれをアップグレードするので、4.8より上のバージョンでエクスポートオプションを見つけます。私は私のソリューション全体で21以上のグリッドを持っており、それぞれが異なる設定(url、postData、...)を持っているので、私はクライアントサイドメソッドの代わりにいくつかのサーバーサイドメソッドを避けようとしています。さらに私は無料のjqGridを使用します。 –

+0

無料のjqGridの現在のバージョンは4.13.6(4.8ではなく)です。バージョン4.4.4は4歳で、何年も前から死んでいます。私はあなたの声明を理解していません: "私は、1つのクライアント側の方法の代わりにいくつかのサーバー側の方法を避けようとしています"。サーバー側の並べ替えまたはクライアント側の並べ替えを行いますか?何行のデータを表示する必要がありますか?少数の行(<1000)の場合は、クライアント側のページング、ソート、およびフィルタリングを使用する必要があります。サーバー側と同じように、より迅速に動作します。 5000行の[デモ](http://www.ok-soft-gmbh.com/jqGrid/OK/performane-13-5000-25-free-jqgrid.htm)を試してみてください – Oleg

答えて

0

最後に、グリッドのフィルタリングとその他の設定をすべてサーバーに送信し、クライアントにリンクを返すようにしました。そして、与えられたリンクで私はExcelファイルをダウンロードすることができました。 Info:投稿(ajax)リクエストでファイルをダウンロードすることはできません。

関連する問題