jqGrid - сохранение флажка выбранного состояния - PullRequest
10 голосов
/ 17 ноября 2011

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

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

1 Ответ

16 голосов
/ 17 ноября 2011

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

Если вам не нужно сортировать по столбцу «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.

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