根据我在讨论中阅读的一些答案,我能够使用我们的网格创建一个“重置列”功能(我很想表扬,但这是针对不同问题的许多不同解决方案的拼凑而成,并且我没有跟踪他们)。
它将恢复可见性、列顺序和冻结状态。如果通过新的列菜单功能修改了列状态,也可以使用。
(dgColModel 是一个全局变量,包含我原来的 colModel)
function resetColumns(grid) {
//remapArray: 0 is the rownumber, 1 is the selection checkbox
var i = 0, cmi, l = dgColModel.length, remapArray = [0, 1];
for (; i < l; i++){
cmi = dgColModel[i];
if (typeof cmi.hidden === 'undefined' || cmi.hidden === false){
grid.jqGrid('showCol', cmi.name);
} else {
grid.jqGrid('hideCol', cmi.name);
}
if (typeof cmi.frozen === 'undefined' || cmi.frozen === false){
grid.jqGrid('setColProp', cmi.name, { frozen: false });
} else {
grid.jqGrid('setColProp', cmi.name, { frozen: true });
}
remapArray.push(getColumnIndexByName(grid, cmi.name));
}
grid.jqGrid("destroyFrozenColumns");
grid.remapColumns(remapArray, true);
grid.jqGrid("setFrozenColumns");
}
function getColumnIndexByName(grid, columnName)
{
var cm = grid.jqGrid('getGridParam','colModel'),i=0,l=cm.length;
for (; i<l; i++) {
if (cm[i].name===columnName) {
return i; // return the index
}
}
return -1;
};
希望这可以成为一个实际的网格函数(当网格被实例化时,colModel 可能会保持不变),但同时它工作得很好。
我希望这会有所帮助!