Проблема с сортировкой столбца при редактировании строк в jqGrid - PullRequest
6 голосов
/ 14 февраля 2012

Мое использование сетки включает в себя сортировку при наличии нескольких строк в режиме встроенного редактирования.

Вопросы будут:

  1. Есть ли способ выполнить сортировку, одновременно редактируя одну или несколько строк?

  2. Если нет, будет ли возникать событие, когда я щелкаю заголовки столбцов во время встроенного редактирования одной или нескольких строк? (Событие, где я могу удалить редактирование перед сортировкой содержимого)

Спасибо, Каталин

Ответы [ 2 ]

7 голосов
/ 15 февраля 2012

интересный вопрос!+1 от меня.

Проблема с сортировкой редактирования строк или ячеек заключается в доступе к содержимому ячеек редактирования.Текущий код jqGrid этого не делает, и поэтому внутри обработчика события click в заголовках столбцов проверяется, есть ли в сетке какая-либо строка редактирования.Если существует какая-либо строка / строки редактирования, то сортировка будет остановлена ​​ без для вызова onSortCol обратного вызова.

Таким образом, только второй способ, в котором можно сохранить или восстановить ячейки редактирования перед сортировкой,возможный.Для реализации этого есть одна маленькая проблема.Если связать дополнительное событие click с заголовками столбцов, оно будет называться после предыдущего стандартного обработчика привязки jqGrid.Таким образом, нельзя сохранить или отменить редактирование, измененное до , будет обработано событие щелчка.Решить проблему можно двумя способами: либо можно вызвать функцию sortData из нового обработчика события, либо изменить порядок привязок на событие click.Следующий код демонстрирует второй подход:

$.each($grid[0].grid.headers, function () {
    var $th = $(this.el), i, l, clickHandler, clickHandlers = [],
        currentHandlers = $th.data('events'),
        clickBinding = currentHandlers.click;

    if ($.isArray(clickBinding)) {
        for (i = 0, l = clickBinding.length; i < l; i++) {
            clickHandler = clickBinding[i].handler;
            clickHandlers.push(clickHandler);
            $th.unbind('click', clickHandler);
        }
    }
    $th.click(function () {
        var p = $grid[0].p, savedRow = p.savedRow, j, len = savedRow.length;
        if (len > 0) {
            // there are rows in cell editing or inline editing
            if (p.cellEdit) {
                // savedRow has the form {id:iRow, ic:iCol, name:nm, v:value}
                // we can call restoreCell or saveCell
                //$grid.jqGrid("restoreCell", savedRow[0].id, savedRow[0].ic);
                $grid.jqGrid("saveCell", savedRow[0].id, savedRow[0].ic);
            } else {
                // inline editing
                for (j = len - 1; j >= 0; j--) {
                    // call restoreRow or saveRow
                    //$grid.jqGrid("restoreRow", savedRow[j].id);
                    $grid.jqGrid("saveRow", savedRow[j].id);
                }
            }
        }
    });
    l = clickHandlers.length;
    if (l > 0) {
        for (i = 0; i < l; i++) {
            $th.bind('click', clickHandlers[i]);
        }
    }
});

, где $grid определены как var $grid = $("#list").Вы можете вживую увидеть, как это работает на следующей демонстрации .

1 голос
/ 14 февраля 2012

Если вы хотите попробовать вариант 2, вы можете подключиться к событию onSortCol. Там вы можете отменить режим редактирования всех строк, а затем разрешить выполнение сортировки. Только убедитесь, что не вернули "stop", иначе сортировка не произойдет вообще.

Возникает сразу после щелчка по сортируемому столбцу и перед сортировкой данных.

Вы можете получить всю документацию здесь .

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