4

다음과 같이 MVC 검도 그리드가 있습니다. 기본 페이징으로 잘 작동합니다.ASP.Net MVC의 사용자 지정 페이징 Kendo Grid

이제 맞춤 페이지를하고 싶습니다. 컨트롤러 액션에서 현재 페이지 인덱스를 알아야합니다. 또한 그리드의 "총"수를 설정해야합니다. [데이터베이스에 100 개의 레코드가 있더라도 실제 데이터 원본에는 한 번에 2 개의 레코드 만 있습니다. 그리드는 "total"특성을 사용하여 데이터베이스의 총 레코드 수를 알아야합니다.]

쿼리는 한 번에 데이터베이스에서 2 레코드 만 반환해야합니다.

Kendo Grid 용 MVC 래퍼를 사용하여이 사용자 정의 서버 페이징을 수행하려면 어떻게해야합니까?

@using (Html.BeginForm()) 
{ 

    @(Html.Kendo().Grid<KendoUIMvcSample.Models.Sample>()  
    .Name("ssgrid222") 
    .Columns(columns => { 
     columns.Bound(p => p.SampleDescription).Filterable(false).Width(100); 
     columns.Bound(p => p.SampleCode).Filterable(false).Width(100); 
     columns.Bound(p => p.SampleItems).Filterable(false).Width(100); 
    }) 
    .AutoBind(false) 
    .Pageable() 
    .Sortable() 
    .Scrollable() 
    .Filterable() 
    .HtmlAttributes(new { style = "height:430px;" }) 
    .DataSource(dataSource => dataSource 
     .Ajax() 
     .PageSize(2) 
     .Read(read => read.Action("Orders_Read", "Sample") 
) 
    ) 
) 
} 

컨트롤러 여기

public ActionResult Orders_Read([DataSourceRequest]DataSourceRequest request) 
     { 

      int currentPageNumber = request.Page; 
      return Json(GetOrders().ToDataSourceResult(request)); 
     } 
+0

이, 검도 처리 및 데이터베이스에 대한 적절한 쿼리를 만들 것입니다

//Paging and Sorting int currentPage = request.Page; int pageSize = request.PageSize; string sortDirection = "ASC"; string sortField = "UpdatedDateTime"; if (request.Sorts != null && request.Sorts.Count > 0) { sortField = request.Sorts[0].Member; sortDirection = request.Sorts[0].SortDirection.ToString(); } //Setting the TOTAL var result = new DataSourceResult() { Data = orders, Total = total // Total number of records }; return Json(result); 

보기. Kendo에 데이터를 전달하기 전에 쿼리를 실행하지 마십시오. –

답변

8

것은 그것은 kendo site에 정의되어 있습니다

컨트롤러 코드 당신이 된 IQueryable을 다시 가져올 경우 생각

 <div class="GridSearch"> 

       @(Html.Kendo().Grid<MVC.Models.TransactionHistoryModel>() 
    .Name("TransactionHistroyGrid") 
    .DataSource(dataSource => dataSource 
     .Ajax() 
     .PageSize(25) 
     .ServerOperation(true) 
     .Read(read => read 
      .Action("TransactionHistorySearch_Read", "TransactionHistoryResults") 
      .Data("additionalData") 
      ) 
    ) 
    .Columns(columns => 
    { 
     columns.Bound(p => p.UserId).Filterable(false).Width(40).Title("Userid"); 
     columns.Bound(p => p.Reviewed).Template(@<text></text>).ClientTemplate("<input id='checkbox' class='chkbx' type='checkbox' />").Filterable(false).Width(30).Title("Reviewed"); 
     columns.Bound(p => p.CreatedOnEnd).Format("{0:MM/dd/yyyy}").Filterable(false).Width(50).Title("Created On"); 
     columns.Bound(p => p.UpdatedOnEnd).Format("{0:MM/dd/yyyy}").Filterable(false).Width(50).Title("Updated On"); 
     columns.Bound(p => p.Comment).Filterable(false).Width(50).Title("Comment"); 
    }) 
    .Pageable() 
    .Sortable() 
    .Scrollable() 
    .Filterable() 
    .HtmlAttributes(new { style = "height:325px;" }) 

) 
      </div> 
2

우리가 검도 ListView를 구현 한 사용자 정의 페이징 솔루션입니다. 사소한 수정으로 그리드에서 작동합니다. 이 솔루션은 사용자 지정 DataSoure 개체와 사용자 지정 JSonResult 클래스로 구성됩니다.

사용자 정의 데이터 소스 :

public class MyDataSource 
{ 
    public object AggregateResults { get; set; } 
    public object Data { get; set; } 
    public object Errors { get; set; } 
    public int Total { get; set; } 
} 

사용자 정의 ActionResult : 작업 방법의 일반적인 사용이 될 것

public class JsonNetResult : ActionResult 
{ 
    public Encoding ContentEncoding { get; set; } 
    public string ContentType { get; set; } 
    public object Data { get; set; } 

    public JsonSerializerSettings SerializerSettings { get; set; } 
    public Formatting Formatting { get; set; } 

    public JsonNetResult() 
    { 
     SerializerSettings = new JsonSerializerSettings(); 
    } 

    public override void ExecuteResult(ControllerContext context) 
    { 
     if (context == null) 
      throw new ArgumentNullException("context"); 

     HttpResponseBase response = context.HttpContext.Response; 

     response.ContentType = !string.IsNullOrEmpty(ContentType) 
            ? ContentType 
            : "application/json"; 

     if (ContentEncoding != null) 
      response.ContentEncoding = ContentEncoding; 

     if (Data != null) 
     { 
      var writer = new JsonTextWriter(response.Output) { Formatting = Formatting }; 

      JsonSerializer serializer = JsonSerializer.Create(SerializerSettings); 
      serializer.Serialize(writer, Data); 

      writer.Flush(); 
     } 
    } 

:

public ActionResult Orders_Read([DataSourceRequest] Object request) 
    { 
     int count = 0; 
     var ds = (DataSourceRequest)request; 
     var ListOfItemsToDisplay = GetItemsWithPagingInfo 
           (
            MySearchParameters, 
            ds.PageSize, 
            ds.Page, 
            out count 
           ); 
     return new JsonNetResult 
           { 
            Formatting = Formatting.Indented, 
            Data = new MyDataSource 
                { 
                 Data = ListOfItemsToDisplay 
                 Total = count, 
                 AggregateResults = null, 
                 Errors = null 
                } 
            }; 
    }