Kendo Grid Выбрать все и сохранить - PullRequest
0 голосов
/ 03 июля 2019

Я работаю над функционалом в 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
});

Таким образом, использование метода set делает этот процесс очень медленным, когда имеется более 300 записей. Chrome перестает отвечать на запросы.Поэтому я изменил это на следующее:

  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, строки с изменениями не отправляются по запросу?

1 Ответ

0 голосов
/ 03 июля 2019

Итак, я нашел ответ: 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, означает, что элемент изменился ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...