Kendo Grid选择全部并保存



我正在研究kendo网格上的功能。有一个表,每个行都有一个复选框,有一个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个记录镀铬变得无反应时,使用集合方法确实使此过程变得更慢。所以我对此进行了更改:

  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时,应将这些记录保存在数据库中的控制器未被调用,这是因为当我使用最后一个stytax时,未检测到Status列的更改..

有什么区别
item.set('STATUS', status);

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

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

,所以我找到了这个答案: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,这意味着项目已更改...

最新更新