2017-01-23 2 views
0

У меня есть решение ASP.net MVC и использование jqGrid в нем. Чтобы иметь лучшую производительность, я использую loadonce: false в качестве опции, и это должно быть таким образом, к сожалению, похоже, это не поддерживается jqGrid, потому что я не могу найти никаких признаков этого во время моего поиска.jqGrid export to excel issue, когда опция loadonce установлена ​​на false

$(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

Какую версию jqGrid вы используете (можете использовать) и из которой вилка jqGrid ([free jqGrid] (https://github.com/free-jqgrid/jqGrid), коммерческая [Guriddo jqGrid JS] (http: /guriddo.net/?page_id=103334) или старый jqGrid в версии <= 4.7)? Вы пишете о плохой производительности jqGrid в случае использования 'loadonce: true'. Это звучит странно. Сколько всего строк должно отображаться? У вас есть данные на сервере, тогда лучше, чтобы * код сервера * экспортировался в Excel. См. [Старый ответ] (http://stackoverflow.com/a/9349688/315935) и [этот] (http://stackoverflow.com/a/13957161/315935). – Oleg

+0

В настоящее время я использую версию 4.4 jqGrid, но я нахожу опцию экспорта в версиях выше 4.8, поэтому я ее обновлю. У меня более 21 сетки в моем решении, и у каждого из них разные настройки (url, postData, ...), поэтому я стараюсь избегать нескольких методов на стороне сервера вместо одного метода на стороне клиента. Кроме того, я использую бесплатный jqGrid. –

+0

Текущая версия бесплатного jqGrid - 4.13.6 (не 4.8). Версия 4.4.4 исполняется 4 года, и она мертва с многих лет. Я не понимаю вашего утверждения: «Я стараюсь избегать нескольких методов на стороне сервера вместо одного метода на стороне клиента». Вы хотите иметь сортировку на стороне сервера или сортировку на стороне клиента? Сколько строк данных необходимо отобразить? В случае небольшого количества строк (<1000) следует использовать подкачку, сортировку и фильтрацию на стороне клиента. Он работает намного быстрее, чем на стороне сервера. Попробуйте [demo] (http://www.ok-soft-gmbh.com/jqGrid/OK/performane-13-5000-25-free-jqgrid.htm) с 5000 строк – Oleg

ответ

0

Наконец, я вынужден опубликовать все фильтры и другие настройки сетки на сервер и вернуть ссылку клиенту. Затем с помощью данной ссылки я смог загрузить файл excel. Info: вы не можете скачать файл с запросом post (ajax).