2016-01-18 2 views
0

Я реализовал сетку кендо, как показано ниже, подкачки работают без каких-либо проблем, но сортировка не работает. Не могли бы вы помочьKendo Сортировка не работает

CSHTML

<div class="panel"> 
<div id="CsHistory" class="row"> 
    <div class="col-lg-12 col-md-12 col-sm-12" style="float:none; margin-left:auto; margin-right:auto; margin-top: 10px; margin-bottom: 10px;"> 
     @using PC.Cmgr.Claims.Domain.Models; 
     @using PC.Cmgr.Claims.Domain.Common; 
     @using PC.Cmgr.Models; 
     @using System.Linq; 
     @(Html.Kendo().Grid<CsAuditTrailViewModel> 
      () 
      .HtmlAttributes(new { style = "width:auto; height:auto; text-center;margin-right: 30px;margin-left: 30px; " }) 
      .Name("AllCsHistory") 
      .Columns(columns => 
      { 
       columns.Bound(o => o.CsAuditTrailId).Title("CsAuditTrailId");     
      }) 
      .ToolBar(toolBar => 
      { 
      }) 
      .Resizable(resize => resize.Columns(false)) 
      .Reorderable(reorder => reorder.Columns(true)) 
      .Sortable() 
      .Pageable(pageable => pageable 
      .Refresh(true) 
      .PageSizes(true) 
      .ButtonCount(5)) 
      .DataSource(dataSource => dataSource 
      .Ajax() 
      .Batch(true) 
      .ServerOperation(true) 
      .Model(model => 
      { 
       model.Id(o => o.CsAuditTrailId); 
      }) 
      .Read(read => read.Action("GetCHistoryByClaimId", "Claims", new { ClaimId = Model.Claim.ClaimId })) 
      .Events(events => { events.Sync("sync_handler"); } 
      ) 
      ) 
     ) 

    </div> 

</div> 

Controller

public async Task<ActionResult> GetCsHistoryByClaimId([DataSourceRequest] DataSourceRequest request, Guid ClaimId) 
    { 
     var CsHistory = await _CsHistoryProxy.GetCsHistoryByClaimId(ClaimId); 
     var rawData = new ConcurrentBag<CsAuditTrailViewModel>(); 
     var gridData = new List<CsAuditTrailViewModel>(); 
     Parallel.ForEach(CsHistory, (x) => 
     { 
      rawData.Add(
       new CsAuditTrailViewModel 
       { 
        CsAuditTrailId = x.CsAuditTrailId,      
        NewData = x.NewData, 
        OldData = x.OldData,      
        UpdateDate = x.UpdateDate, 
        UserId = x.UserId           
       }); 
     }); 



     ViewData["total"] = rawData.Count(); 

     // Apply paging 
     if (request.Page > 0) 
     {    
      gridData = rawData.Skip((request.Page - 1) * request.PageSize).ToList(); 
     } 

     gridData = gridData.Take(request.PageSize).ToList(); 


     var result = new DataSourceResult() 
     { 
      Data = gridData, 
      Total = (int)ViewData["total"] 
     }; 

     return Json(result); 
    } 

ответ

1

Вы Виль должны настроить его для решения. Поля сортировки находятся в вашем DataSourceRequest, вы можете обработать их в своем контроллере. Смотрите этот пример:

if (request.Sorts.Any()) 
    { 
     foreach (SortDescriptor sortDescriptor in request.Sorts) 
     { 
      if (sortDescriptor.SortDirection == ListSortDirection.Ascending) 
      { 
       switch (sortDescriptor.Member) 
       { 
        case "OrderID": 
         orders= orders.OrderBy(order => order.OrderID); 
         break; 
        case "ShipAddress": 
         orders= orders.OrderBy(order => order.ShipAddress); 
         break; 
       } 
      } 
      else 
      { 
       switch (sortDescriptor.Member) 
       { 
        case "OrderID": 
         orders= orders.OrderByDescending(order => order.OrderID); 
         break; 
        case "ShipAddress": 
         orders= orders.OrderByDescending(order => order.ShipAddress); 
         break; 
       } 
      } 
     } 
    } 

Вы должны сделать сортировку до пейджинга ...

Взято из: http://docs.telerik.com/kendo-ui/aspnet-mvc/helpers/grid/custom-binding

+0

Что SortDescriptor здесь? – SmartestVEGA

+0

SortDescriptor из пространства имен Kendo.Mvc (=> Kendo.Mvc.SortDescriptor) Он содержит сортировку, заданную в сетке (одна или несколько в request.Sorts) – Poiter

1

С Telerik часто задаваемые вопросы,

Для АЯКС связывания сценариев для выполнения обработки данных должен использоваться метод расширения ToDataSourceResult.

Таким образом, вы должны сделать это таким образом,

var result = new DataSourceResult() 
{ 
    Data = gridData.ToDataSourceResult(request).Data, 
    Total = (int)ViewData["total"] 
}; 
Смежные вопросы