Как выделить последнюю выбранную строку после сортировки на стороне клиента на jqGrid? - PullRequest
6 голосов
/ 30 июля 2011

У меня есть приложение на основе jqGrid, и я использую loadonce: true в параметре сетки и sortable: true, sorttype: 'text в colModel, чтобы разрешить сортировку на стороне клиента в сетке данных. Однако я обнаружил, что после повторной сортировки сетки данных последняя выбранная строка больше не будет выделяться. У меня вопрос, как сохранить выделенную строку выделенной во время обработки данных?

1 Ответ

10 голосов
/ 31 июля 2011

Я подготовил для вас небольшую демонстрацию , которая сохраняет выбор строки.В демоверсии я переписал код selectionPreserver , используемый в случае использования reloadGrid с дополнительными параметрами: $("#list").trigger("reloadGrid", [{current:true}]);.Подробнее см. ответ .

Демонстрация сохраняет текущий выбор внутри обработчика событий onSortCol и восстанавливает его внутри loadComplete:

onSortCol: function () {
    saveSelection.call(this);
},
loadComplete: function () {
    restoreSelection.call(this);
}

Как вы видите использование очень просто, и вы можете интегрировать его в свой код.Реализация saveSelection и restoreSelection выглядит следующим образом:

var lastSelArrRow = [],
    lastScrollLeft = 0,
    lastSelRow = null,
    saveSelection = function () {
        var $grid = $(this);
        lastSelRow = $grid.jqGrid('getGridParam', 'selrow');
        lastSelArrRow = $grid.jqGrid('getGridParam', 'selrow');
        lastSelArrRow = lastSelArrRow ? $.makeArray(lastSelArrRow) : null;
        lastScrollLeft = this.grid.bDiv.scrollLeft;
    },
    restoreSelection = function () {
        var p = this.p,
            $grid = $(this);

        p.selrow = null;
        p.selarrrow = [];
        if (p.multiselect && lastSelArrRow && lastSelArrRow.length > 0) {
            for (i = 0; i < lastSelArrRow.length; i++) {
                if (lastSelArrRow[i] !== lastSelRow) {
                    $grid.jqGrid("setSelection", lastSelArrRow[i], false);
                }
            }
            lastSelArrRow = [];
        }
        if (lastSelRow) {
            $grid.jqGrid("setSelection", lastSelRow, false);
            lastSelRow = null;
        }
        this.grid.bDiv.scrollLeft = lastScrollLeft;
    };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...