2013-03-18 14 views
8

Ich versuche, Kendo-UI-Raster mit Paginierung zu verwenden. Alles scheint zu funktionieren, erwarte für das Total-Attribut, obwohl ich es auf 100 setze, zeigt es 1 - 10 von 10 Items an, welche die Seitengröße ich setze. Jeder hatte besseren Erfolg damit? Ich habe Kendo-Dokumente und -Foren ohne Erfolg durchsucht.Kendo UI - Grid-Paginierung (Serverseite)

@(Html.Kendo().Grid(Model) 
.Name("Grid") 
.Columns(columns => 
{ 
    foreach (System.Data.DataColumn column in Model.Columns) 
    { 
     columns.Bound(column.ColumnName); 
    } 
}) 
.Pageable() 
.Sortable() 
.Scrollable() 
.Filterable() 
.Groupable() 
.DataSource(dataSource => dataSource 
    .Ajax() 
    .PageSize(10) 
    .Total(100) 
    .Model(model => 
     { 
      foreach (System.Data.DataColumn column in Model.Columns) 
      { 
       model.Field(column.ColumnName, column.DataType); 
      }     
     }) 
    .Read(read => read.Action("Read", "Controls")) 
) 

)

Dank

+0

Was passiert, wenn Sie das Attribut ".Total" entfernen? – JBntis

+0

Können Sie bitte die Lösung posten, wenn Sie sie mit ASP.Net MVC Wrapper gelöst haben? – Lijo

Antwort

12

As explained in the documentation wenn serverPaging aktiviert ist müssen Sie insgesamt in Ihrem Schema angeben, und Sie müssen auch diese Summe jedes Mal, wenn Sie Antwort genau nach dem Schema spezifiziert an dieser Stelle vom Server zurückkehren zurückzukehren.

dataSource: { 
    serverPaging: true, 
    schema: { 
     data: "data", 
     total: "total" 
    }, 
    //... 

Das gleiche wird diskutiert here.

Überprüfen Sie die folgenden example.

+1

Danke, wie Sie aus meinem Code sehen können, verwende ich den Kendo Wrapper, da mein Modell DataTable ist. Ich würde es vorziehen, das weiter zu benutzen.Ich konnte kein Beispiel finden, das mit einem MVC-Wrapper funktioniert. – spooti

+0

Wie sieht Ihre Controller-Aktion aus - read.Action ("Read", "Controls"))? –

+0

Es ist nicht genau das, was ich gesucht habe, aber ich habe einige Änderungen an meinem Code und habe es mit diesem Ansatz arbeiten, Danke – spooti

0

Nach dem ursprünglichen Beispiel der „Total“ wird automatisch erkannt, und wenn Sie wollen pro Seite 100 Ergebnisse zeigen es in dem „Pagesize“ Set statt .

+0

Ich möchte 10 Artikel pro Seite anzeigen lassen und sage, dass ich 100 Artikel insgesamt habe – spooti

+0

Von ursprünglichem Beispiel, Es gibt keine "Total" angegeben, versuchen Sie es zu entfernen und Sie erhalten: 1 - 10 von 100 Artikeln – JBntis

+1

das wird funktionieren, wenn ich alle 100 Artikel zurückgeben werde, die ich nicht möchte. Ich möchte Server Seite Paginierung nicht Client-Seite. – spooti

0

Wenn Sie Kendo-Wrapper verwenden für ASP.NET MVC, sollten Sie erwägen:

.EnableCustomBinding(true) 

Wie in dieser article erklärt, kundenspezifische Bindung ermöglicht Einbau-Paging/Sortieranlagen zu umgehen. Auf diese Weise wird Total berücksichtigt.

+0

Dank Andrei Ich werde es überprüfen – spooti

6

Richtig, Sie müssen das Feld Gesamt in Ihrer Antwort übergeben.

Ihre Ansicht kann wie:

@(Html.Kendo().Grid<YourViewModel>() 
     .Name("grid") 
     .DataSource(dataSource => dataSource   
      .Ajax() 
      .PageSize(20) 
      .ServerOperation(true) 
      .Read(read => read.Action("Data_Read", "YourController", new {Id=Model.CurrentId})) 
     ) 
     .Columns(c => 
     { 
      c.Bound(x => x.Name); 
      c.Bound(x => x.CreatedTime); 
     }) 
     .Pageable() 
     .Sortable() 
) 

Ihre Aktions-Code wie folgt:

public ActionResult Data_Read([DataSourceRequest]DataSourceRequest request, int Id) 
     { 
      int total = yourQuery.GetTotal(Id); 

      var returnViewModel = yourQuery.GetViewModels(Id, request.Page, request.PageSize); 


      return Json(new 
      { 
       Data = returnViewModel, 
       Total=total 
      }); 
     } 

Ansicht der Anfrage und Antwort in Fiddler Sie sehen, wie die Magie passiert: Anfrage: sort = SessionId-ASC & page = 7 & pagesize = 20 & Gruppe = & filter =

Dies ist das DataSourceRequest-Format, das vom Grid an den Controller übergeben wird. Es enthält bereits die Parameter, die für das Paging benötigt werden.

Sehen Sie sich die Antwort der Aktion an und Sie werden sehen, dass ein Datenfeld alle Datensätze enthält. Das Feld Gesamt ist der Gesamtbetrag für alle Datensätze, der für das Paging des Kendo-Rasters erforderlich ist.