2013-03-18 36 views
8

我想用分页的Kendo-UI网格。一切似乎工作期望为Total属性,但我将其设置为100,它显示了我设置页面大小的10个项目中的1-10个。任何人都有这个更好的成功?我搜索了Kendo文档和论坛没有成功。剑道UI - 网格分页(服务器端)

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

感谢

+0

如果删除“.Total”属性会发生什么? – JBntis 2013-03-18 13:42:47

+0

如果您使用ASP.Net MVC Wrapper解决了问题,可以请您发布解决方案吗? – Lijo 2013-08-05 11:30:07

回答

12

As explained in the documentation当启用serverPaging你需要在你的架构,说明总,您还需要返回每次从服务器正好在schema指定这个地方返回响应时间总。

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

同样讨论here

检查以下example

+1

谢谢,你可以从我的代码中看到我使用的是Kendo Wrapper,因为我的模型是DataTable。我宁愿继续使用它。我无法找到适用于MVC包装的示例。 – spooti 2013-03-20 14:12:10

+0

你的控制器动作如何 - read.Action(“Read”,“Controls”))? – 2013-03-20 14:31:56

+0

这不是我正在寻找的,但我做了一些更改我的代码,并得到它与这种方法一起工作,谢谢 – spooti 2013-03-21 19:01:56

0

根据最初的例子,“总”将被自动识别,如果你想显示每页100个结果设置在“每页”相反。

+0

我想每页显示10项,并可以说我总共有100个项目 – spooti 2013-03-18 13:50:43

+0

从原始示例,没有“总计”陈述,请尝试删除它,您将得到: 1 - 10 of 100项 – JBntis 2013-03-18 13:54:27

+1

将工作,如果我会返回所有100项,我不想。我希望服务器端分页不是客户端。 – spooti 2013-03-18 13:58:41

0

如果您使用ASP.NET MVC剑道包装,考虑增加:

.EnableCustomBinding(true) 

在本article解释,自定义绑定允许绕过内置分页/分类设施。 就这样,Total将被考虑在内。

+0

谢谢安德烈我会检查出来 – spooti 2013-04-10 15:13:15

6

对,您需要在您的回复中传递总计字段。

你的看法可能是这样的:

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

你的动作如下代码:

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

查看在提琴手的请求和响应,你会看到神奇的是如何发生的: 请求:排序= SessionId-asc & page = 7 & pageSize = 20 & group = & filter =

这是网格传递给控制器​​的DataSourceRequest格式;它已经包含了分页所需的参数。

查看从操作的反应,你会看到有一个包含所有记录的数据字段。 Total字段是Kendo网格分页所需的所有记录的总金额。