温馨提示:本文翻译自stackoverflow.com,查看原文请点击:javascript - Kendo Grid Select All and Save
asp.net-mvc javascript kendo-grid

javascript - Kendo Grid全选并保存

发布于 2020-03-27 11:21:12

我正在研究Kendo Grid上的功能。有一个表,每行都有一个复选框,有一个Select All检查所有复选框选项,并且该旁边的Select All选项旁边有一个按钮Update All,当您单击Update All它会更新Status网格中所选行的数量,但是它尚未在数据库上更新。要更新数据库上的那些行,您必须单击一个Save Changes按钮。我遇到的问题是,当我单击Update All按钮时,性能超过100行时非常非常慢,我知道为什么,Javascript这是使步骤非常慢的代码:

  var items = $('#grid').data().kendoGrid.dataSource.data();
$.each(selectedRows, function (index, r) {
 var indexOf = rows.indexOf(r);
 var item = items[indexOf];
item.set('STATUS', status); //This line of code is very slow for more than 100 records
});

因此,当有300条以上的记录时,Chrome变得无响应,因此使用set方法会使此过程非常缓慢。所以我将其更改为:

  var items = $('#grid').data().kendoGrid.dataSource.data();
$.each(selectedRows, function (index, r) {
 var indexOf = rows.indexOf(r);
 var item = items[indexOf];
item.STATUS = status; //It works fast now
});
kendoGrid.refresh();

网格在前端正确更新,但是当我单击Save Changes不应该将那些记录保存在数据库上的控制器时,未调用,这是因为Status使用最后一种语法时未检测到列上的更改。之间的差异

item.set('STATUS', status);

item.STATUS = status; 
kendoGrid.refresh();

为什么在第二步中使用该set()方法将行保存到数据库中,但是当我使用item.STATUS = status;并单击Save Changes具有更改的行时却未根据请求发送呢?

查看更多

查看更多

提问者
AlexGH
被浏览
139
AlexGH 2019-07-03 23:02

所以我找到了这个答案:https : //stackoverflow.com/a/20959758/5614045 并更新了我的语法如下:

 var items = $('#grid').data().kendoGrid.dataSource.data();
$.each(selectedRows, function (index, r) {
 var indexOf = rows.indexOf(r);
 var item = items[indexOf];
item.STATUS = status; //It works fast now
item.dirty = true; //Added this line of code.
});
kendoGrid.refresh();

现在可以正常工作了,显然有一个dirty标志,当设置为true时,表示项目已更改...