2013-03-18 4 views
8

Sto provando a utilizzare la griglia Kendo-UI con l'impaginazione. tutto sembra funzionare aspettarsi per l'attributo Total, anche se l'ho impostato su 100 mostra 1 - 10 di 10 elementi che la dimensione della pagina sto impostando. Qualcuno ha avuto un successo migliore con questo? Ho cercato documenti e forum Kendo senza successo.UI di Kendo - Impaginazione della griglia (lato server)

@(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")) 
) 

)

Grazie

+0

Cosa succede se rimuovi l'attributo ".Total"? – JBntis

+0

Puoi pubblicare la soluzione se hai risolto il problema utilizzando ASP.Net MVC Wrapper? – Lijo

risposta

12

As explained in the documentation quando serverPaging è abilitato è necessario specificare totale nel vostro schema e si anche bisogno di restituire quella totale ogni volta che si torna risposta data dal server esattamente a questo luogo indicato dallo schema.

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

Lo stesso è discusso here.

Controllare il seguente example.

+1

Grazie, come puoi vedere dal mio codice Sto usando il Kendo Wrapper, dal momento che il mio modello è DataTable. Preferirei continuare a usarlo.Non sono riuscito a trovare un esempio che funzioni con un wrapper MVC. – spooti

+0

Come funziona l'azione del controller - leggi.Azione ("Leggi", "Controlli"))? –

+0

Non è esattamente quello che stavo cercando, ma ho apportato alcune modifiche al mio codice e ho funzionato con questo approccio, Grazie – spooti

0

secondo l'esempio originale, il "Total" saranno riconosciuti automaticamente, e se si desidera visualizzare 100 risultati per pagina fissati nel "PageSize" Invece .

+0

Voglio mostrare 10 articoli per pagina, e diciamo che ho 100 articoli in totale – spooti

+0

Dall'esempio originale, Non c'è "Totale" dichiarato, Provare a rimuoverlo e si otterrà: 1 - 10 di 100 articoli – JBntis

+1

che funzionerà se restituirò tutti i 100 articoli, che non voglio. Voglio l'impaginazione lato server non lato client. – spooti

0

Se si utilizza wrapper Kendo per ASP.NET MVC, considerare l'aggiunta di:

.EnableCustomBinding(true) 

come spiegato in questo article, associazione personalizzata permette di bypassare built-in di paging/strutture di smistamento. In tal modo, Total verrà preso in considerazione.

+0

Grazie Andrei, lo controllerò – spooti

6

A destra, è necessario passare il campo Totale nella risposta.

tuo punto di vista può essere come:

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

Il tuo codice di azione, come di seguito:

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

Vista la richiesta e la risposta in Fiddler si vedrà come avviene la magia: Richiesta: sort = SessionId-asc & page = 7 & pageSize = 20 & gruppo = & filtro =

Questo è il formato DataSourceRequest che la griglia passa al controller; contiene già i parametri necessari per il paging.

Visualizza la risposta dall'azione e vedrai che c'è un campo Dati contenente tutti i record. Il campo Totale è l'importo totale per tutti i record richiesto per il paging della griglia di Kendo.