kendo ui网格过滤器,服务器中的排序和分页

时间:2014-02-06 13:05:21

标签: kendo-ui kendo-grid

我正在使用kendo网格,并希望在服务器中执行过滤,排序和分页。我明白我应该添加到dataSource:

serverPaging: true,
serverSorting: true

但是如何告诉grid / dataSource它应该用于哪个url,用于sortig,过滤等。 如果我想自己执行sortig怎么办?我想使用控制kendo提供但是自己去服务器。有没有像“sortTriggered”这样的事件,我可以称之为“prevntDefault”或类似的东西......我不知道。

3 个答案:

答案 0 :(得分:3)

看一下这个样本。它正在为Windows Azure使用MobileServices javascript api,但它向您展示了如何自己处理服务器分页和排序。

http://jsbin.com/efeKiwO/11/edit

在dataSource的传输函数上,每个方法(read,update,create,destroy)都可以配置为一个函数(这是读函数,它处理任何排序和分页)。

read: function(options) {
        // Get the table
        var table = client.getTable("Customer");

        // Build base query
        var query = table.includeTotalCount();

        // Add paging
        if(options.data.skip !== undefined && options.data.take !== undefined) {
          query = query.skip(options.data.skip).take(options.data.take);
        }

        // Add sorting
        if(typeof options.data.sort !== "undefined" && options.data.sort !== null) {
          for(var i = 0; i< options.data.sort.length; i++) {
            if(options.data.sort[i].dir === "desc") {
              query = query.orderByDescending(options.data.sort[i].field);
            }
            else {
              query = query.orderBy(options.data.sort[i].field);
              }
          }
        }

        var promise = query.read();

        promise.done(function(data) {
          options.success(data);
        });
      },

在该功能中,你可以做任何你喜欢的事情。您可以进行$ .getJSON调用或$ .ajax调用,或者您想要执行的任何其他操作,而不是使用此示例的javascript库。该函数的参数对象将包含分页,排序和过滤所需的所有内容。获得数据后,只需调用options.success(dataSet);使用正确的排序/分页数据集,您的网格将绑定到它。

答案 1 :(得分:3)

您的配置几乎就在那里,

缺少什么是连接到MVC的秘诀。

让我们假设您的DataSource配置如下:

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

为什么[DataSourceRequest]很重要?

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

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

答案 2 :(得分:0)

Kendo网格只使用一个url来检索数据,它将从DataSource对象中获取。

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

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