Подтвердить что ты не робот

JqGrid - сохранение выбранного флажка

Проверка флажков через страницы в jqGrid стирает выбранные флажки. Итак, если я проверил некоторые флажки на странице 1, а затем нажмите "Далее", чтобы перейти на страницу 2, а затем вернитесь на страницу 1, выбранные флажки больше не будут проверяться.

Есть ли способ в jqgrid для обработки этого на стороне клиента?

4b9b3361

Ответ 1

В первой части ответа содержится ответ на ваш вопрос. Немного улучшенной версии демо вы можете найти здесь.

Если вам не нужно сортировать по столбцу "multiselect" демо, сделайте то, что вам нужно. Некоторые небольшие замечания о демонстрации: флажок над столбцом "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 fork jqGrid поддерживает опцию multiPageSelection: true, которая может быть объединена с multiselect: true вариант. Он позволяет удерживать параметр selarrrow (список идентификаторов выбранных строк) на многих страницах. По умолчанию jqGrid reset массив selarrrow во время подкачки, но в случае использования multiPageSelection: true, multiselect: true он не перезагружается. Кроме того, он предварительно выбирает все строки из массива selarrrow во время сборки страницы. Таким образом, если один заполняет массив selarrrow всеми столбцами элементов (все строки по всем страницам), тогда строки будут отображены выбранными. Пользователь все еще может отменить выбор некоторых строк, и jqGrid не изменит изменения, внесенные пользователем.

Демонстрация, созданная для , показывает использование multiPageSelection: true в бесплатном jqGrid. Еще один ответ описывает в скором времени другие новые опции бесплатного jqGrid: multiselectPosition: "right", который позволяет переместить столбец флажков multiselect вправо, multiselectPosition: "none", что позволяет использовать multiselect функциональности без какого-либо столбца multiselect и обратного вызова hasMultiselectCheckBox, который можно использовать для создания флажков multiselect не во всех строках jqGrid.