2017-01-23 8 views
0

ASP.net MVC 솔루션이 있고 jqGrid를 사용하고 있습니다. 더 나은 성능을 얻으려면 옵션으로 loadonce: false을 사용하고이 방법으로해야합니다. 불행히도 jqGrid에서 지원하지 않는 것 같습니다. 내 검색을 통해 그 기호를 찾을 수 없기 때문입니다.loadonce 옵션이 false로 설정된 경우 jqGrid 내보내기 문제가 발생합니다.

$(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 살이며 다년간 죽었습니다. 저는 귀하의 성명서를 이해하지 못합니다. "한 가지 클라이언트 측 방법 대신 여러 가지 서버 측 방법을 피하려고합니다." 서버 측 정렬 또는 클라이언트 측 정렬을 원하십니까? 몇 행의 데이터를 표시해야합니까? 행 수가 적을 경우 (<1000) 클라이언트 쪽 페이징, 정렬 및 필터링을 사용해야합니다. 서버 측만큼 빠르게 작동합니다. 5000 개의 행이있는 [데모] (http://www.ok-soft-gmbh.com/jqGrid/OK/performane-13-5000-25-free-jqgrid.htm)를 사용해보십시오. – Oleg

답변

0

마지막으로 그리드의 모든 필터링 및 기타 설정을 서버에 게시하고 클라이언트에 대한 링크를 반환해야했습니다. 그런 다음 주어진 링크를 통해 엑셀 파일을 다운로드 할 수있게되었습니다. Info : 게시물 (아약스) 요청이있는 파일을 다운로드 할 수 없습니다.