РЕДАКТИРАНЕ: Крайното решение е по-долу.
Независимо дали се опитвам да внедря пренареждане на колони чрез плъзгане на заглавка или чрез приставката за избор на колони, след пренареждане на колоните, щракването върху която и да е заглавка на колона за сортиране води до зареждане на сортираните колони на първоначалните им позиции в таблицата. Използване на метода за сортиране:
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(). По този начин състоянието се запазва само когато потребителят излезе от страницата. Надявам се това да помогне на някой друг.