2015-01-21 20 views
0

표시된 행의 정렬을 에 구현하고 싶습니다. jqgrid jqgrid의 기본 동작은 모든 레코드를 정렬합니다. 나는 서버 측에서 처리했으나 문제는 내가 정렬 할 때 나는 항상 페이지가 1이 되어도 읽을 수있다. 페이지 2 또는 other.below가 내 코드이기도하다. loadComplete, & onPaging 메서드를 시도했다. 당신이 페이징을 얻을 후 jqgrid로 문제 정렬

$(document).ready(function() { 
     $("#grid").jqGrid({ 
      emptyrecords: "No records to view", 
      ignoreCase: true, 
      datatype: "json", 
      url: '@Url.Action("LoadData", "Home")', 
      mtype: "GET", 
      height: 'auto', 
      rowNum: 5, 
      rowList: [5, 10, 15, 20], 
      colNames: ['EmployeeId', 'EmployeeCity', 'EmployeeName'], 
      colModel: [ 
      { name: 'EmployeeId', index: 'EmployeeId', key: true, width: 200, sorttype: 'int' }, 
      { name: 'EmployeeName', index: 'EmployeeName', width: 200, sorttype: 'text' }, 
      { name: 'EmployeeCity', index: 'EmployeeCity', width: 200, sorttype: 'text' } 
      ], 
      pager: '#pager', 
      sortname: 'EmployeeId', 
      viewrecords: true, 
      sortorder: "asc", 
      caption: "jqGrid Example" 
     }).navGrid("#pager", 
     { search: false, refresh: false, add: false, edit: false, del: false }, 
     {}, 
     {}, 
     {} 
     ); 
    }); 

그리고 내 서버 측 코드는,

public ActionResult LoadData(int page, int rows, string sidx, string sord) 
    { 
     List<Employee> employeeList = new List<Employee>(); 
     for (int i = 1; i < 18; i++) 
     { 
      employeeList.Add(
     new Employee() { EmployeeId = i, EmployeeCity = "Mumbai_" + i, EmployeeName = "Jason_" + i } 
     ); 
     } 
     var totalRecords = 0; 
     var totalPages = 0; 
     var griddata = new List<Employee>(); 
     if (employeeList != null) 
     { 
      griddata = employeeList.Skip((page - 1) * rows).Take(rows).ToList(); 
      switch (sidx.ToLower()) 
      { 
       case "employeeid": 
        if (sord.ToLower() == "asc") 
         griddata.OrderBy(x => x.EmployeeId).ToList(); 
        else 
         griddata.OrderByDescending(x => x.EmployeeId).ToList(); 
        break; 
       default: 
        griddata.OrderByDescending(x => x.EmployeeName).ToList(); 
        break; 
      } 
      totalRecords = employeeList.Count; 
      totalPages = (int)Math.Ceiling((double)totalRecords/(double)rows); 
     } 
     var employeeListData = new 
     { 
      total = totalPages, 
      page = page, 
      records = totalRecords, 
      rows = griddata, 
     }; 
     return Json(employeeListData, JsonRequestBehavior.AllowGet); 
    } 

답변

0

나는이 부분을 의미한다. 숨겨진 필드가 하나 추가되었습니다.

<input type="hidden" id="exampleGrid" value="" /> 

$(document).ready(function() { 
     $("#grid").jqGrid({ 
      emptyrecords: "No records to view", 
      ignoreCase: true, 
      datatype: "json", 
      url: '@Url.Action("LoadData", "Home")', 
      mtype: "GET", 
      height: 'auto', 
      rowNum: 5, 
      rowList: [5, 10, 15, 20], 
      colNames: ['EmployeeId', 'EmployeeName', 'EmployeeCity'], 
      colModel: [ 
      { name: 'EmployeeId', index: 'EmployeeId', key: true, width: 200, sorttype: 'int' }, 
      { name: 'EmployeeName', index: 'EmployeeName', width: 200, sorttype: 'text' }, 
      { name: 'EmployeeCity', index: 'EmployeeCity', width: 200, sorttype: 'text' } 
      ], 
      pager: '#pager', 
      sortname: 'EmployeeId', 
      viewrecords: true, 
      loadComplete: function() { 
       var page = $('#grid').jqGrid('getGridParam', 'page'); 
       $("#exampleGrid").val(page); 
      }, 
      onSortCol: function (index, iCol, sortOrder) { 
       $('#grid').jqGrid('setGridParam', { 
        page: $("#exampleGrid").val() 
       }); 
      }, 
      sortorder: "asc", 
      caption: "jqGrid Example" 
     }).navGrid("#pager", 
     { search: false, refresh: false, add: false, edit: false, del: false }, 
     {}, 
     {}, 
     {} 
     ); 
    }); 
1

당신은 서버 측에서 데이터를 주문한다.

griddata = employeeList.Skip((page - 1) * rows).Take(rows).ToList(); 
switch (sidx.ToLower()) 
{ 
    case "employeeid": 
     if (sord.ToLower() == "asc") 
      griddata.OrderBy(x => x.EmployeeId).ToList(); 
     else 
      griddata.OrderByDescending(x => x.EmployeeId).ToList(); 
     break; 
    default: 
     griddata.OrderByDescending(x => x.EmployeeName).ToList(); 
     break; 
} 

그냥 같이 순서를 변경 : : 예는 마지막으로 간단한 방법으로 수행

switch (sidx.ToLower()) 
{ 
    case "employeeid": 
     if (sord.ToLower() == "asc") 
      employeeList = employeeList.OrderBy(x => x.EmployeeId).ToList(); 
     else 
      employeeList = employeeList.OrderByDescending(x => x.EmployeeId).ToList(); 
     break; 
    default: 
      employeeList = employeeList.OrderByDescending(x => x.EmployeeName).ToList(); 
     break; 
} 
griddata = employeeList.Skip((page - 1) * rows).Take(rows).ToList(); 
+0

로있는 jqGrid 수정이 work.My의 주요 문제는 내가 컨트롤러에 2 페이지와 정렬 그리드 오전 때 나는 page1.I이가있는 jqGrid 자체의 문제라고 생각받을입니다 doesnot. – SidD

+0

격자 정의가 잘 보입니다. 컨트롤러 메소드의 끝에서'griddata '에 무엇이 있는지 디버그에 체크인 했습니까? –

+0

예, 주된 것은 페이지가 2 일 때도 항상 page1을 보여줍니다. 위 코드를 시도해 볼 수 있습니다. 페이지 2를 보내지 않을 것입니다. 또한 HTTP 헤더를 확인했으며 페이지 1을 보여주고 있습니다. 오전 2시. – SidD