2013-03-18 13 views
8

Próbuję użyć siatki Kendo-UI z paginacją. wszystko wydaje się działać w oczekiwaniu na atrybut Total, chociaż ustawiłem go na 100, pokazuje od 1 do 10 z 10 elementów, które ustawiam w ustawionym rozmiarze. Ktoś miał lepszy sukces z tym? Przeszukałem dokumenty Kendo i fora bez powodzenia.Kendo UI - pagodowanie siatki (strona serwera)

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

)

Dzięki

+0

Co się stanie, jeśli usuniesz atrybut ".Total"? – JBntis

+0

Czy możesz opublikować rozwiązanie, jeśli rozwiązałeś je za pomocą programu ASP.Net MVC Wrapper? – Lijo

Odpowiedz

12

As explained in the documentation gdy serverPaging jest włączona należy określić sumie w schemacie i trzeba także zwrócić że łączna za każdym razem wrócisz odpowiedź z serwera dokładnie w tym miejscu, określonym przez schemat.

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

To samo dotyczy here.

Sprawdź następujące example.

+1

Dzięki, jak widać z mojego kodu używam Kendo Wrapper, ponieważ mój model to DataTable. Wolałbym dalej z tego korzystać.Nie mogłem znaleźć przykładu, który działa z opakowaniem MVC. – spooti

+0

Jak wygląda działanie kontrolera - read.Action ("Read", "Controls"))? –

+0

Nie jest to dokładnie to, czego szukałem, ale wprowadziłem pewne zmiany w moim kodzie i zmusiłem go do pracy z tym podejściem, Dzięki – spooti

0

Według pierwotnego przykład, „całkowita” będą uznawane automatycznie, a jeśli chcesz, aby pokazać 100 wyników na stronie ustawić go w „pageSize” Zamiast .

+0

Chcę wyświetlić 10 elementów na stronie i powiedzmy, że mam łącznie 100 pozycji – spooti

+0

Z oryginalnego przykładu Nie ma żadnego "Łącznego", spróbuj go usunąć, a otrzymasz: 1 - 10 z 100 pozycji – JBntis

+1

które zadziała, jeśli zwrócę wszystkie 100 przedmiotów, których nie chcę. Chcę strony paginacji po stronie serwera, a nie po stronie klienta. – spooti

0

Jeśli używasz owijarki Kendo dla ASP.NET MVC, należy rozważyć dodanie:

.EnableCustomBinding(true) 

Jak wyjaśniono w tym article, zwyczaj wiązania pozwala na ominięcie wbudowaną stronicowania/udogodnienia sortowania. W ten sposób suma zostanie uwzględniona.

+0

Dzięki Andrei, sprawdzę to – spooti

6

Dobrze, musisz podać pole Razem w swojej odpowiedzi.

Państwa zdanie może być jak:

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

Twój kod akcji, jak poniżej:

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

przejrzeć żądania i odpowiedzi w Fiddler widać jak dzieje się magia: żądanie: sort = SessionId-asc & strona = 7 & pageSize = 20 & grupa = & filtr =

To jest format DataSourceRequest, który kratka przechodzi do kontrolera; zawiera już parametry potrzebne do stronicowania.

Wyświetl odpowiedź z akcji, a zobaczysz pole Dane zawierające wszystkie rekordy. Pole Łączna jest całkowitą kwotą dla wszystkich rekordów wymaganych dla stronicowania Kendo.