带有服务器端分页和分组的Kendo Grid

时间:2013-11-11 20:55:29

标签: asp.net-mvc-4 kendo-ui kendo-grid kendo-asp.net-mvc

我正在使用ASP.NET MVC4和Kendo UI的MVC包装器(2013.2.830)。 我的目标是让服务器端分页/排序/过滤/分组全部与Kendo网格一起工作。我可以使分页/排序/过滤工作正常......但需要一些关于如何处理分组的建议。这是我到目前为止从网格调用的动作:

public ActionResult GetGridDataSource([DataSourceRequest] DataSourceRequest request)
{
    // get the data using the values from the request
    EntityCollection<CustomerEntity> customers;
    int totalItemCount;
    using (var proxy = new CustomerServiceProxy())
    {
        // NOTE: just an example... 
        // The service doesn't take in the kendo data types for sort/filters.
        // They are transformed to data types that the service does use.
        customers = proxy.FindCustomers(
            request.Filters,
            request.Sorts,
            request.Page,
            request.PageSize,
            out totalItemCount);
    }

    // build the datasource using the view model
    var dataSource = (from customer in customers
                      select new CustomerViewModel
                      {
                          CustomerName = customer.Name,
                          // etc
                      }).ToList();

    // this code returns the data for the requested page correctly
    var result = new DataSourceResult();
    result.Total = totalItemCount;
    result.Data = dataSource;
    return Json(result, JsonRequestBehavior.AllowGet);
}

如果我使用var result = dataSource.ToDataSourceResult(request);,那么一切正常,除了分页(第1页后没有数据返回给客户端)。似乎ToDataSourceResult()方法试图从dataSource中提取第2页,即使dataSource已经代表第2页。

理想情况下,我想使用ToDataSourceResult(),如果可以解决分页问题。 否则,我假设在设置result.Data属性之前我需要手动将分组应用于我的数据源,以便返回的JSON格式正确。有没有Kendo功能可以做到这一点?如果我需要手动执行此操作,有人可以提供一个示例,说明如何从请求中获取分组参数并将其应用于数据源,以便JSON正确吗?

谢谢!

3 个答案:

答案 0 :(得分:1)

请参阅nugetgithub上的KendoGridBinderEx,它支持排序,过滤,分页,分组和聚合。

答案 1 :(得分:0)

试试这个:

public virtual JsonResult GetGridDataSource([DataSourceRequest()] DataSourceRequest request)
    //Get data : var dataSource = ...
    int requestPage = request.Page;
    request.Page = 1;
    var result = dataSource.ToDataSourceResult(request);
    result.Total = sortpag.ItemCount;
    request.Page = requestPage;
    return Json(result);
}

答案 2 :(得分:0)

我提供的答案here解释了一种服务器端方法,该方法适用于分页,过滤,排序和(最难以捉摸的)分组,所有这些都使用Telerik的Kendo.Mvc .NET库。< / p>

请记住,我的回答是使用JavaScript声明的Kendo DataSource,而不是使用MVC包装器,因为当我第一次编写解决方案时,它使我能够更好地控制所有DataSource选项。但是,您将找到有关MVC包装器方法here的更多信息,以及使用针对WebApi后端here的MVC包装器。