Удалить несколько строк в Free-jqGrid с локальной сеткой (4.15) - PullRequest
1 голос
/ 28 апреля 2019

Я вижу здесь много эталонных реализаций для достижения возможности удалять более 1 выбранных строк в jqGrid.

Однако все эти реализации в конечном итоге выполняют итерацию по списку идентификаторов строк и вызывают delRowData в каждом из них.

когда выбирается, скажем, 1000 строк, это плохо масштабируется, так как кажется, что мы ожидаем o (n) для каждого удаления строки, в результате чего o (n ^ 2) для всей операции.

есть ли способ удалить ВСЕ выбранные строки одним единственным o (n)?

(Один пост, который я прочитал, состоял в том, чтобы отправить его на сервер и просто перезагрузить все с нуля, так как общая экономия времени очень высока. Я ищу встроенный метод внутри самого jqGrid)

Спасибо

Tal.

1 Ответ

1 голос
/ 28 апреля 2019

Я начну с общего замечания.Не рекомендуется отображать больше строк на странице, так как это будет возможно отображать сразу.Производительность сетки, например, с 10000 строками и 25 строками на странице, существенно лучше по сравнению с использованием 1000 строк на странице.

В любом случае, общее изменение нескольких строк данных в локальной сетке не используется delRowData или addRowData.Гораздо эффективнее заменить целые данные.Типичный код будет

var grid = $("#grid"),
    p = grid.jqGrid("getGridParam"); // get reference to all parameters

p.data = newdata; // replace data parameter
grid.trigger("reloadGrid");

Поэтому я бы предложил вам получить копию данных (или у вас уже есть данные вне сетки), удалить элементы с идентификаторами, которые необходимо удалить,установите новое значение p.data и триггер reloadGrid для отображения первой страницы измененных данных.

Кстати, использование delRowData происходит очень медленно, как вы описали.Причина - перекомпоновка браузера .Если у вас есть страница, например, с элементами 1000x10, и вы удаляете только первую строку (вы изменяете 10 элементов), то веб-браузер должен пересчитать стили CSS (например, положение) практически всех существующих элементов встр.Тогда удаление второго ряда будет почти таким же сложным.Таким образом, использование delRowData или addRowData в цикле будет очень неэффективным.При перезагрузке сетки jqGrid строит все тело сетки как один фрагмент HTML и помещает его в DOM страницы в операции one .Из-за этого перезагрузка сетки может быть очень быстрой.

...