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.

Другие вопросы по тегам