jqGrid — после изменения порядка столбцов сортировка сопоставляет данные с исходными столбцами.

EDIT: окончательное решение приведено ниже.

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

sortable: { 

update: function (perm) {
    /*
     * code to save the new colmodel goes here
    */
    // the following line doesn't seem to do anything... just seems to return an array identical to 'perm'
    $("#mainGrid").jqGrid("getGridParam", "remapColumns");

    // if included, the next line causes the headers to not move
    $("#mainGrid").jqGrid("remapColumns", perm, true); 

    // this alternate allows them to move, but the newly sorted columns still get remapped to their original position
    $("#mainGrid").jqGrid("remapColumns", [0,1,2,3,4,5,6,7,8,9,10,11,12], true);

    /* the following allows the headers to move, and allows the sort to occur ONLY
     * if the order coming back from the database is unchanged. Note that in my real
     * code I create an array of consecutive integers to pass as the first param to
     * remapColumns()
     */
    $("#mainGrid").jqGrid("remapColumns", [0,1,2,3,4,5,6,7,8,9,10,11,12], true, false);
}
}

Когда страница открывается в первый раз, она создает модель столбца по умолчанию из XML-файла. Когда пользователь меняет порядок заголовков, новая модель столбца и имена столбцов сохраняются в базе данных в виде строк JSON. Когда пользователь делает еще один вызов базы данных, функция считывает новый порядок столбцов из базы данных и создает массив данных с новым порядком.

Проблема, похоже, заключается в том, что после того, как jqGrid переназначил столбцы, он по-прежнему ожидает увидеть данные, возвращаемые с сервера, в исходном порядке. Итак, если исходные данные

[ [A1, B1, C1], [A2, B2, C2], [A3, B3, C3] ]

после переназначения столбцов на порядок C | А | B, jqGrid по-прежнему хочет, чтобы данные возвращались в исходном порядке.

Мое окончательное решение состояло в том, чтобы удалить код, сохраняющий состояние модели столбца, из функции sortable.update() и поместить его в window.onbeforeunload(). Таким образом, состояние сохраняется только тогда, когда пользователь покидает страницу. Надеюсь, это поможет кому-то еще.


person earachefl    schedule 17.01.2013    source источник
comment
Если вы решили свою проблему, вы должны отметить свой ответ ниже и отметить его как решенный.   -  person Mark    schedule 18.01.2013


Ответы (1)


Смотрите отредактированный вопрос. Без метода обновления colModel лучшим решением кажется поместить функцию сохранения состояния в window.onbeforeunload().

person earachefl    schedule 18.01.2013