Grid KendoUI网格服务器分页

Grid KendoUI网格服务器分页,grid,kendo-ui,Grid,Kendo Ui,我试图用JSON数据填充KendoUI网格,其中服务器返回数据中的总行数,但在让serverPaging正常工作时遇到了一些问题。我创建并分配网格的数据源,如下所示: var oDS = new kendo.data.DataSource({ schema: { data: "data", total: "total"

我试图用JSON数据填充KendoUI网格,其中服务器返回数据中的总行数,但在让serverPaging正常工作时遇到了一些问题。我创建并分配网格的数据源,如下所示:

                var oDS = new kendo.data.DataSource({
                    schema: {
                        data:  "data",
                        total: "total"
                    },
                    data: self.grdTableData,
                    serverPaging: true,
                    pageSise: 50,
                    total: joOutput["TotalRecords"]
                });

                grdTableResults.setDataSource(oDS);
第一页显示了939条记录中的前50条,但只有一页(导航箭头从不响应任何内容),我看到了939条记录中的NaN-NaN和网格中心的旋转圆点,它们永远不会消失

在我所看到的所有示例中,有一点是不同的,那就是我的$.ajax调用和.done中JSON数据的处理没有使用“transport:read”,但我认为我如何发送和获取数据应该无关紧要(或者是因为每个页面请求都是新的服务器读取?)。但我认为我在正确处理服务器分页方面做得还不够,尽管我似乎正在设置数据源值,类似于在上一个示例中设置的值。还有我不确定的“take”和“skip”值,但我确实有“startIndex”和“rowsPerPage”发送到服务器,可以在那里使用。我假设网格可以告诉我显示的是哪一页,我可以适当地设置“startIndex”,如果我有“每页项目数”下拉列表,我可以重置“rowsPerPage”值


无论如何,对于所有的新手问题,我深表歉意。我们真诚地感谢您的帮助和建议。谢谢!

交通:阅读

通过将值设置为函数,您应该能够使用“传输:读取”,即使您有自定义逻辑。我创建了一个来演示此功能

dataSource: {
    serverPaging: true,
    schema: {
        data: "data",
        total: "total"
    },
    pageSize: 10,
    transport: {
        read: function(options) {
            var data = getData(options.data.page);
            options.success(data);
        }
    },
    update: function() {}
}
read函数包含一个参数,该参数包含以下分页属性:page、pageSize、skip、take。请记住,如果一个操作包含函数,则所有传输操作都必须是函数

startIndex和rowsPerPage

如果您的服务器接受这些参数,您应该能够在read函数中提交它们

var ajaxPostData = { startIndex: options.data.skip, rowsPerPage: options.data.pageSize }

这是服务器端包装器的代码,我正在使用该包装器使用剑道网格实现服务器分页:

@(Html.Kendo().Grid())
.名称(“产品列表”)
.列(列=>
{
columns.Bound(prod=>prod.Name);
columns.Bound(ord=>ord.Brand);
columns.Bound(ord=>ord.UnitPackageOption);
columns.Bound(ord=>ord.CategoryName);
columns.Bound(ord=>ord.Description);
})
.Pageable(pager=>pager.pagesize(true))
.Selectable(可选=>Selectable.Mode(GridSelectionMode.Multiple))
.PrefixUrlParameters(假)
.DataSource(ds=>ds.Ajax()
.Model(m=>m.Id(ord=>ord.Id))
.页面大小(5)
.Read(Read=>Read
.行动(“FilterProductsJson”、“ProductManagement”)
.Data(“getFilters”))
)
)
其中
getFilters
是一个javascript函数,当它想要从url/service获取数据时,它将我的自定义过滤器参数传递给网格:

函数getFilters(){
返回{
品牌:$(“#品牌”).val(),
名称:$(“#名称”).val(),
类别:$(“#类别名称”).val()
};
}
此外,您应该使用kendo的
DataSourceRequest
类来实现控制器的动作方法,如下图所示,否则它将无法按您希望的方式工作:

public JsonResult FilterProductsJson([DataSourceRequest()]DataSourceRequest请求,
//用于自定义筛选的三个附加参数
字符串品牌、字符串名称、字符串类别)
{
int top=request.PageSize;
int skip=(request.Page-1)*顶部;
如果(品牌!=null)
brand=brand.Trim();
if(name!=null)
name=name.Trim();
如果(类别!=null)
category=category.Trim();
var searchResult=new ManageProductBiz().GetPagedFilteredProducts(品牌、名称、类别、顶部、跳过);
//删除循环引用:
searchResult.Items.ForEach(prd=>prd.Category.Products=null);
返回Json(新的DataSourceResult{Data=searchResult.Items,Total=searchResult.TotalCount},JsonRequestBehavior.AllowGet);
}

有几个问题我不明白:您提到了服务器分页,但在我看来,您的数据实际上来自一个名为
self.grdTableData
的JavaScript数组。如果是这样,那么说
serverPaging
,这是用于远程服务器是没有意义的。在您编写
pageSize
中有一个打字错误ode>pageSise,它也在代码中吗?为什么要定义一个
模式
?在记住实际定义的情况下,似乎并不需要它。虽然客户端和服务器现在出于测试目的是同一台机器,但最终服务器将是远程的。也许我不明白服务器分页是否真的必要——数据无论它来自何处,它仍然是一个JavaScript数组。我想我只是需要一种读取数据块的机制,这样我就可以更高效地读取和分页数据,而不是拥有数千行数据。这确实是一个打字错误,它去掉了旋转的圆圈,现在我看到了多个页码和939项中的1-50项tead of NaN-NaN of 939个项目,但单击任何数字或箭头仍然没有响应。感谢缓存。这对我来说很有效,但我想使用服务器端包装器(asp.net mvc)来完成,你知道这是否可能吗?@Ashkan如果你有解决方案,你可以分享ASP.Net包装方法吗?@Lijo:我发布了一个答案,希望它能对其他人有所帮助。@emp非常感谢这一点。你知道
接受
跳过
保留
页面
页面大小
p参数在任何地方都有文档记录?不,我恐怕它们没有文档记录(它们不在这里:)。您只需要使用Fiddler或任何其他网络inspe