jqGrid:列重新排序时是否有事件?
我正在jqGrid中使用列重新排序功能jqGrid:列重新排序时是否有事件?,jqgrid,Jqgrid,我正在jqGrid中使用列重新排序功能 $grid = jQuery("#list").jqGrid({ sortable:true, ... }); 是否存在列重新排序后激发的事件?如果有,我就看不见了 提前感谢jqGrid sortable rows插件,该插件说可以使用sortable小部件中的所有可用选项和事件 如果这是正确的,那么您只需使用可排序插件的一部分就可以了。这可以: [已编辑] $('.ui jqgrid hbox table',$('#'+gridId).
$grid = jQuery("#list").jqGrid({
sortable:true,
...
});
是否存在列重新排序后激发的事件?如果有,我就看不见了
提前感谢jqGrid sortable rows插件,该插件说可以使用sortable小部件中的所有可用选项和事件
如果这是正确的,那么您只需使用可排序插件的一部分就可以了。这可以:
[已编辑]
$('.ui jqgrid hbox table',$('#'+gridId).parents('.ui jqgrid view')).bind(“sortstop”,函数(){onGridColumnReordered(gridId)})
当然,在需要传递gridId并创建onGridColumnReordered函数的地方。在阅读了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");
})
享受吧 更新()中的grid.jqueryui.js(jqGrid v3.8.2)中有一个对ts.p.sortable.update()的调用,如上所述,因此: 但是,请注意,传递给回调函数的数组将相对于当前列顺序。换句话说,在移动多个列后按原样保存数组将不会产生所需的结果 我必须这样做:
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);
var defaultColNames=['Alpha','Beta','Gamma'];
var defaultColModel=[
{名称:'alpha',索引:'alpha'},
{名称:'beta',索引:'beta'},
{name:'gamma',index:'gamma'}
];
jQuery('#gridId').jqGrid({
...,
colNames:defaultColNames,
colModel:defaultColModel,
可排序:{更新:函数(relativeColumnOrder){
var grid=jQuery('#gridId');
var defaultColIndicies=[];
对于(var i=0;i来说,这不是更容易吗?只需使用ui元素映射所有行,并使用sortable index()函数查找它们的位置
stop: function(e, ui) {
console.log($.map($(this).find('tr.ui-widget-content'), function(el) {
return el.id + ' = ' + $(el).index();
}));
}
@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);
}
用这个
$("#list").navGrid('#pager1', { edit: true, add: true, del: true });
谢谢…我认为这看起来也很有希望。但是我仍然不知道如何设置此事件的处理程序。我尝试在初始化网格时添加更新:function(event,ui){alert(“”;}),以及$(“#list”).bind(“sortupdate”,function(){alert(“”;});在网格初始化之后。但是这两个都不适用于我…有指针吗?谢谢,sortable函数的更新选项与grid.jqGrid(“getGridParam”、“remapColumns”)结合在一起对我有效正如groxx所建议的,它似乎得到了相同的专栏order@zishan你知道是否有办法中止列的排列吗?对我来说根本不起作用。看起来没有任何事件绑定成功发生。
$("#list").navGrid('#pager1', { edit: true, add: true, del: true });