jqGrid - сохранение флажка выбранного состояния
Установка флажков на страницах в jqGrid стирает выбранные флажки. Поэтому, если я установлю некоторые флажки на странице 1, а затем нажму "Далее", чтобы перейти на страницу 2, а затем вернусь на страницу 1, выбранные флажки больше не будут отмечены.
Есть ли способ в jqgrid для обработки этого на стороне клиента?
1 ответ
Первая часть ответа содержит ответ на ваш вопрос. Немного улучшенную версию демо вы можете найти здесь.
Если вам не нужно сортировать по столбцу "multiselect", демо-версия делает то, что вам нужно. Несколько небольших замечаний по поводу демонстрации. Флажок над столбцом "множественный выбор" выбирает / отменяет выбор всех строк только на текущей странице. Если вы хотите другое поведение, код будет еще проще. Я включил в демонстрационный выбор 3 предмета напрямую, загрузив сетку. Два элемента будут выбраны на первой странице и один элемент на второй странице. В некоторых ситуациях поведение может быть интересным. Если вам это не нужно, просто прокомментируйте строку idsOfSelectedRows = ["8", "9", "10"];
Ниже вы найдете самые важные части кода демо
var $grid = $("#list"), idsOfSelectedRows = [],
updateIdsOfSelectedRows = function (id, isSelected) {
var index = $.inArray(id, idsOfSelectedRows);
if (!isSelected && index >= 0) {
idsOfSelectedRows.splice(index, 1); // remove id from the list
} else if (index < 0) {
idsOfSelectedRows.push(id);
}
};
// initialize selection
idsOfSelectedRows = ["8", "9", "10"];
$grid.jqGrid({
datatype: 'local',
// ... other parameters
multiselect: true,
onSelectRow: updateIdsOfSelectedRows,
onSelectAll: function (aRowids, isSelected) {
var i, count, id;
for (i = 0, count = aRowids.length; i < count; i++) {
id = aRowids[i];
updateIdsOfSelectedRows(id, isSelected);
}
},
loadComplete: function () {
var $this = $(this), i, count;
for (i = 0, count = idsOfSelectedRows.length; i < count; i++) {
$this.jqGrid('setSelection', idsOfSelectedRows[i], false);
}
}
});
Если вы хотите, вы можете рассмотреть вопрос о проведении idsOfSelectedRows
в качестве дополнительного параметра jqGrid. В настоящее время нет проверки параметров jqGrid, и вы можете расширить их там. Преимуществом будет постоянство idsOfSelectedRows
вместе с соответствующей jqGrid.
ОБНОВЛЕНО: бесплатный jqGrid форк из jqGrid поддерживает multiPageSelection: true
вариант, который можно комбинировать с multiselect: true
вариант. Это позволяет держать параметр selarrrow
(список идентификаторов выбранных строк) на многих страницах. По умолчанию jqGrid сбрасывает массив selarrrow
во время подкачки, но в случае использования multiPageSelection: true, multiselect: true
это не так сбрасывается. Кроме того, он предварительно выбирает все строки из selarrrow
массив при построении страницы. Таким образом, если заполнить selarrrow
массив со всеми строками элементов (все строки на всех страницах), тогда строки будут отображаться выделенными. Пользователь по-прежнему может отменить выбор некоторых строк, и jqGrid не изменит внесенные пользователем изменения.
Демо, созданное для ответа, показывает использование multiPageSelection: true
в бесплатной jqGrid. Еще один ответ описывает вкратце другие новые возможности бесплатной jqGrid: multiselectPosition: "right"
, что позволяет переместить столбец множественных флажков вправо, multiselectPosition: "none"
, что позволяет использовать функциональность множественного выбора без какого-либо столбца множественного выбора и hasMultiselectCheckBox
обратный вызов, который можно использовать для создания множественных флажков не во всех строках jqGrid.