Kendo ui 剑道ui网格过滤、排序和服务器分页

Kendo ui 剑道ui网格过滤、排序和服务器分页,kendo-ui,kendo-grid,Kendo Ui,Kendo Grid,我正在使用剑道网格,希望在服务器中执行过滤、排序和分页。我理解我应该向数据源添加: serverPaging: true, serverSorting: true 但是我如何告诉网格/数据源它应该使用哪个url进行排序、过滤等呢。 如果我想自己表演巫术呢?我想使用剑道提供的控制,但我自己去服务器。是否有类似“sortTriggered”的事件,我可以称之为“prevntDefault”或类似的事件。。。我不知道。剑道网格只使用一个url来检索数据,它将从数据源对象获取 网格每次需要数据时都会调

我正在使用剑道网格,希望在服务器中执行过滤、排序和分页。我理解我应该向数据源添加:

serverPaging: true,
serverSorting: true
但是我如何告诉网格/数据源它应该使用哪个url进行排序、过滤等呢。
如果我想自己表演巫术呢?我想使用剑道提供的控制,但我自己去服务器。是否有类似“sortTriggered”的事件,我可以称之为“prevntDefault”或类似的事件。。。我不知道。

剑道网格只使用一个url来检索数据,它将从数据源对象获取

网格每次需要数据时都会调用此url,并且排序和分页参数将添加到基于网格上下文向服务器发出的每个请求中


然后,服务器将收到一个标准的web请求,其中包含构建您自己的请求所需的所有参数。然后您必须以正确格式发送响应(例如:JSONP-OData)。

看看这个示例。它使用的是适用于WindowsAzure的MobileServicesJavaScriptAPI,但向您展示了如何自行处理服务器分页和排序

在数据源的传输函数上,可以将每个方法(读取、更新、创建、销毁)配置为一个函数(这是读取函数,它处理任何排序和分页)

读取:功能(选项){
//收拾桌子
var table=client.getTable(“客户”);
//构建基查询
var query=table.includeTotalCount();
//添加分页
if(options.data.skip!==未定义和&options.data.take!==未定义){
query=query.skip(options.data.skip).take(options.data.take);
}
//添加排序
if(typeof options.data.sort!=“未定义”&&options.data.sort!==null){
对于(var i=0;i

在这个函数中,你可以做任何你喜欢的事情。您可以进行$.getJSON调用、或$.ajax调用,或其他任何您想做的事情,而不是像本示例那样使用javascript库。函数的参数对象将包含分页、排序和筛选所需的所有内容。一旦你有了数据,只需看涨期权即可;使用正确排序/分页的数据集,您的网格将绑定到该数据集。

您的配置即将就绪

缺少的是连接MVC的秘方

假设您的数据源配置如下:

var myDataSource = new kendo.data.DataSource({
    transport: {
        read: {
            url: 'Users/Read',
            type: 'POST'
        }
    },
    serverSorting: true,
    serverFiltering: true,
    serverPaging: true
}
在UsersController.cs(示例)中的服务器端,您必须接收[DataSourceRequest]

public DataSourceResult Read([DataSourceRequest] DataSourceRequest request)
{
    // Here you might actually get the items from your cache or database. 
    var List<User> myList = new List<User>();         

    // Here is when the kendo magic happens. 
    return myList.ToDataSourceResult(request);
}
publicDataSourceResult读取([DataSourceRequest]DataSourceRequest请求)
{
//在这里,您可能实际从缓存或数据库中获取项目。
var List myList=新列表();
//这就是剑道魔术发生的时候。
返回myList.ToDataSourceResult(请求);
}
为什么[DataSourceRequest]很重要

因为它包含网格向服务器请求的分页、排序和过滤参数。因此,如果你想自己做算法,你必须检查请求并处理那些参数。只需记住返回DataSourceResult对象实例


如果您的对象位于缓存中,并且您的字段在过滤、分组、排序等方面不需要特殊处理,那么只需使用kendo C#扩展名来处理DataSourceResult。它将使用动态LINQ语句处理您的项目并应用过滤、排序、分页配置。

所以我不能有任何想要的url?如果我有一个特殊的url,我不能使用它怎么办?你的意思是你有不同的url,基于你想要的排序/页面?你能给你的问题添加一些例子吗?这正是我想做的,但出于某种原因,当我添加“服务器排序”时对于数据源,排序不起作用,并且未调用读取函数。如果在客户端处理,则不需要ServerSorting。如果我删除“ServerSorting”,则将不会调用读取函数。不管怎样,我解决了这个问题。现在可以使用了,谢谢。您使用的是哪种服务器端技术?不知道是否相关,但我们使用的是wcfIt。所以现在我发布了一个没有样板JS代码的简单配置。。。据我所知,它将在内存中执行分页/排序等操作,而不是让sql server来完成繁重的工作……好吧,这是一个更需要问剑道成员的问题。我已经检查了他们的一些C#代码,是的,他们正在使用LINQ进行所有需要的转换,因此这实际上取决于备份IEnumerable的内容。因此,有可能DB最终将完成所有的重型吊装。只是在将查询传递给剑道之前,不要将其具体化为内存中的对象。免责声明:我们还没有在我的公司购买使用最新剑道版本的许可证,因为我们不再依赖该框架,所以我对服务器端剑道的了解可能已经过时了。
public DataSourceResult Read([DataSourceRequest] DataSourceRequest request)
{
    // Here you might actually get the items from your cache or database. 
    var List<User> myList = new List<User>();         

    // Here is when the kendo magic happens. 
    return myList.ToDataSourceResult(request);
}