jqGrid - След пренареждане на колони, сортирането картографира данните към оригиналните колони

РЕДАКТИРАНЕ: Крайното решение е по-долу.

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

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 | A | 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