我正在使用jqGrid中的列重新排序功能
$grid = jQuery("#list").jqGrid({
sortable:true,
...
});
是否有重新排序列后触发的事件?如果有,我看不到它!
提前致谢
答案 0 :(得分:9)
在{(3}}中讨论的update()to ts.p.sortable.update()中的grid.jqueryui.js(jqGrid v3.8.2)中调用,所以:
jQuery('#gridId').jqGrid({
...,
sortable: { update: function(permutation) {
alert('save permutation somewhere');
},
...
});
但请注意,传递给回调的数组将与当前列顺序相关。换句话说,在移动多列之后保存数组将不会产生所需的结果。
我必须做这样的事情:
var defaultColNames = [ 'Alpha', 'Beta', 'Gamma' ];
var defaultColModel = [
{ name: 'alpha', index: 'alpha' },
{ name: 'beta', index: 'beta' },
{ name: 'gamma', index: 'gamma' }
];
jQuery('#gridId').jqGrid({
...,
colNames: defaultColNames,
colModel: defaultColModel,
sortable: { update: function(relativeColumnOrder) {
var grid = jQuery('#gridId');
var defaultColIndicies = [];
for( var i=0; i<defaultColModel.length; i++ ) {
defaultColIndicies.push(defaultColModel[i].name);
}
if( grid.getGridParam('treeGrid') ) {
// tree grid mode adds 5 extra columns
defaultColIndicies = defaultColIndicies.concat(['level','parent','isLeaf','expanded','loaded']);
}
var columnOrder = [];
var currentColModel = grid.getGridParam('colModel');
for( var j=0; j<relativeColumnOrder.length; j++ ) {
columnOrder.push(defaultColIndicies.indexOf(currentColModel[j].name));
}
// columnOrder now contains exactly what's necessary to pass to to remapColumns
// now save columnOrder somewhere
globalColumnOrder = columnOrder;
},
...
});
// grab saved column order from cookie or something
var globalColumnOrder = [0,1,2];
// append to array if tree grid enabled
if( jQuery('#gridId').getGridParam('treeGrid') ) {
// tree grid mode adds 5 extra columns
for( var k=defaultColNames.length; k<(defaultColNames.length+5); k++ ) {
globalColumnOrder.push(k);
}
}
// restore column order
jQuery('#gridId').jqGrid('remapColumns', globalColumnOrder, true, false);
答案 1 :(得分:3)
在阅读W先生的回复并进行一些实验后发现,有一种更好的做事方式:
$("#gbox_" + gridid).bind("sortstop", function(){
// you can even get the current permutation!
// Yes, it looks like you may be grabbing the remapColumns function.
// You're not, you get an array of integers back.
grid.jqGrid("getGridParam", "remapColumns");
})
享受!
答案 2 :(得分:2)
这有效:
[EDITED]
$('。ui-jqgrid-hbox table',$('#'+ gridId).parents('。ui-jqgrid-view'))。bind(“sortstop”,function(){onGridColumnReordered(gridId) )})
您需要传递gridId并创建onGridColumnReordered函数。
答案 3 :(得分:1)
jqGrid可排序行插件的demo表示可以使用可排序小部件中的所有可用选项和事件。
如果这是正确的,那么你应该没问题,只使用update event这是可排序插件的一部分。
答案 4 :(得分:0)
这不会更容易。只是使用ui元素映射所有行并使用可排序的index()函数找到它们的位置?
stop: function(e, ui) {
console.log($.map($(this).find('tr.ui-widget-content'), function(el) {
return el.id + ' = ' + $(el).index();
}));
}
答案 5 :(得分:0)
@msanjay给出的评论是最好的方式 这样做,这是代码,对我有用。
var globalvar_sortingorder;
jQuery('#gridId').jqGrid({
.......
sortable: { update: function(relativeColumnOrder) {
var grid = jQuery('#gridId');
var columnOrder=grid.jqGrid("getGridParam", "remapColumns");
// columnOrder now contains exactly what's necessary to pass to to remapColumns
// now save columnOrder somewhere
globalvar_sortingorder=columnOrder;
}}
....
});
恢复列顺序
if(getObjectFromLocalStorage("sortingorder")) {
jQuery('#gridId').jqGrid('remapColumns', globalvar_sortingorder, true, false);
}
答案 6 :(得分:0)
使用这个
$("#list").navGrid('#pager1', { edit: true, add: true, del: true });