2016-05-06 4 views
2

Ich habe diese Definition in einer cshtml Datei:Kendo UI Grid: Ich verliere Paginierung nach Datenquelle Refresh

@{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(); 
} 

In der Steuerung I .ToDataSourceResult(request) verwenden und es funktioniert perfekt (das Gitter Paginierung). Das Problem tritt auf, wenn ich die Datenquelle ändern muss. Dies geschieht, weil der Benutzer filtern, suchen kann ... Ich rufe von Ajax auf die gleiche Methode "SearchSalesOrder" mit mehr Parametern. Mit Javascript, nehme ich die json aus der Antwort und ich ändern, um die Datenquelle auf diese Weise:

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

Danach zeigt der Pager nur eine Seite. Ich müsste die Datenquelle ändern und die Seitennummer beibehalten.

Danke.

Antwort

0

Ich denke, ich habe es. Es war sehr einfach. Ich musste das total Attribut in der schema hinzufügen. Grundsätzlich in Javascript, wenn ich die Datenquelle ändern muss, habe ich diesen Code:

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(); 

Es funktioniert. :)