如何知道kendo网格数据源的变化

时间:2015-03-30 10:54:12

标签: c# asp.net-mvc kendo-ui kendo-grid kendo-asp.net-mvc

我正在使用kendo Grid,该网格将包含大量数据。

我需要刷新按钮点击事件和下拉列表更改的网格数据 通过在点击和下拉更改事件中读取网格数据,它正常工作。但网格数据正在重新加载,即使它没有变化,这意味着数据与网格的先前数据相同。因此它导致性能问题我。

如何知道网格数据是否已更改?

2 个答案:

答案 0 :(得分:0)

您提到的问题是性能问题,您要求的功能是比较大数据是否有变化。然后将客户端中的大数据与db上的数据进行比较也不会对性能产生任何影响,IMO会使速度变慢。 因此,请考虑使用服务器端操作,例如分页。

关于你的问题,我将添加一些帮助你做一些比较逻辑的链接:

MSDN - Enumerable.SequenceEqual

Stackoverflow - Is there a built-in method to compare collections in C#?

解决方案:仅请求当前页面与服务器相关的数据,如果不相等则进行比较,然后将数据发送回客户端(浏览器)。

答案 1 :(得分:0)

你无法做你想做的事。但是,如果您正确实现分页,您的网格将只检索当前页面,这应该不会太多。

如果您使用类似于Entity Framework的ORM,这很容易,因为ToDataSourceResult会更改查询以包含分页,排序和过滤选项。

这样的事情:

<强>控制器

public ActionResult GetGridData([DataSourceRequest]DataSourceRequest request)
{
    using (var context = new EntityFrameworkContext()) 
    {
        IQueryable<MyModel> result = context.Products.Where(w => w.Something).Select(s => new MyModel());
        return Json(result.ToDataSourceResult(request));
    }
}

查看

@(Html.Kendo().Grid<MyModel>()
    .Name("Grid")
    .Columns(columns =>
    {
        columns.Bound(c => c.Name);
        columns.Bound(c => c.Date);
    })
    .Pageable(pageable => pageable
        .Refresh(true)
        .PageSizes(true)
        .ButtonCount(10)
        .PageSizes(new[] { 20, 50, 100 }))
    .DataSource(ds => ds
        .Ajax()
        .Read(r => r.Action("GetGridData", "Home"))
        .PageSize(20)
    )
)