我正在使用kendo Grid,该网格将包含大量数据。
我需要刷新按钮点击事件和下拉列表更改的网格数据 通过在点击和下拉更改事件中读取网格数据,它正常工作。但网格数据正在重新加载,即使它没有变化,这意味着数据与网格的先前数据相同。因此它导致性能问题我。
如何知道网格数据是否已更改?
答案 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)
)
)