2015-01-21 2 views
0

Я хочу реализовать сортировку видимых строк в jqgrid поведение jqgrid по умолчанию сортирует все записи. Я обработал его на стороне сервера, но проблема в том, что когда я делаю сортировку, я всегда получаю страницу как 1, даже когда я нахожусь на page2 или другим. Ниже мой код я также пробовал 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="" /> 

Модифицированный 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', '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

Это оленья кожа work.My Основная проблема, когда я нахожусь на 2-й странице и сортировки сетки на контроллере я Получать page1.I думаю, что это проблема с самим jqgrid. – SidD

+0

Ваше определение сетки выглядит отлично. Вы проверили в отладке, что находится в 'griddata' в конце метода контроллера? –

+0

да, главное, он всегда показывает страницу1, даже когда я на странице 2. вы можете попробовать код выше, вы увидите, что он не отправит page2.I также проверил заголовки HTTP и обнаружил, что он также показывает страницу1, когда я am на странице2. – SidD