2016-05-06 3 views
2

У меня есть это определение в файле cshtml:Кендо UI Сетка: Я теряю пагинацию после обновления источника данных

@{Html.Kendo().Grid<OrderItem>() 
    .Name("OrderList")            
    .Columns(columns => { 
         ......... 
        }) 
    .DataSource(binding => binding 
     .Ajax() 
     .PageSize(14) 
     .Model(model => model.Id(p => p.No)) 
     .Read(read => read.Action("SearchSalesOrder", "SalesOrder"))   
    ) 
    .Sortable() 
    .Pageable() 
    .Filterable() 
    .Scrollable() 
    .Render(); 
} 

В контроллере я использую .ToDataSourceResult(request) и она прекрасно работает (сетка имеет нумерацию страниц). Проблема возникает, когда мне приходится менять источник данных. Это происходит потому, что пользователь может фильтровать, искать ... Я вызываю Ajax к тому же методу «SearchSalesOrder» с большим количеством параметров. Использование Javascript, я беру JSON от ответа и изменить источник данных таким образом:

var dataSource = new kendo.data.DataSource({ 
    data: result.Data, 
    pageSize: 14 
}); 
grid.setDataSource(dataSource); 
grid.refresh(); 

После этого пейджер показывает только одну страницу. Мне нужно изменить источник данных, сохраняя разбивку на страницы.

Спасибо.

ответ

0

Я думаю, что получил. Было очень просто. Мне пришлось добавить атрибут total в schema. В основном в Javascript, когда мне нужно изменить источник данных, у меня есть этот код:

var grid = $("#OrderList").data("kendoGrid"); 
var dataSource = new kendo.data.DataSource({ 
    transport: { 
     read: { 
       url: '/Sales/SearchSalesOrder', 
       type: 'POST', 
       data: { 
        page: 1, pageSize: 14, startDate: startDateParam, endDate: endDateParam,..... 
       } 
     } 
    }, 
    pageSize: 14, 
    serverPaging: true, 
    schema: { 
     parse: function (response) { 
      // Charts refresh 
      ....... 

      return response.Data; 
     }, 
     total: function (response) { 
      return response.Total; 
     }, 
     data: "Data" 
    } 
}); 
grid.setDataSource(dataSource); 
grid.refresh(); 

Это работает. :)

Смежные вопросы