如何捕获jqGrid列更改事件?

如何捕获jqGrid列更改事件?,jqgrid,Jqgrid,在我们的应用程序中,我们使用jqGrid,它支持隐藏和重新排序列。当列被隐藏或重新排序时,我们希望将新设置存储到数据库中。但要做到这一点,我们需要以某种方式捕获隐藏或重新排序事件。或者可能在模型更改时捕获 有没有办法捕获和处理这些事件 谢谢。您可以使用的“完成”事件。以下是一个例子: var grid = $("list"); grid.navButtonAdd( '#pager', {caption:"", buttonicon:"ui-icon-calculator", ti

在我们的应用程序中,我们使用jqGrid,它支持隐藏和重新排序列。当列被隐藏或重新排序时,我们希望将新设置存储到数据库中。但要做到这一点,我们需要以某种方式捕获隐藏或重新排序事件。或者可能在模型更改时捕获

有没有办法捕获和处理这些事件


谢谢。

您可以使用的“完成”事件。以下是一个例子:

var grid = $("list");
grid.navButtonAdd(
    '#pager',
    {caption:"", buttonicon:"ui-icon-calculator", title:"Column choose",
     onClickButton: function() {
         grid.jqGrid('columnChooser',
                     {
                         "done": function(perm) {
                             if (perm) {
                                 this.jqGrid("remapColumns", perm, true);
                             }
                             // here you can do some additional actions
                         }
                     });
     }
});
更新:如果将
可排序
选项定义为

sortable: {
    update: function (permutation) {
        alert("sortable.update");
    }
}

而不是作为
sortable:true
您将收到关于新列顺序的通知。有关详细信息,请参见jqGrid的。带有整数的数组
置换
的含义与
remapColumns
函数中的含义相同(有关详细信息,请参见my)。

您可以通过Oleg的“update”中的可排序参数捕获列更改,或如上所述


但是,请注意,传递给回调函数的数组将相对于当前列顺序。换句话说,在移动多个列后按原样保存数组将不会产生所需的结果。请参阅我的答案。

谢谢您的提示,但我们使用的不是columnChooser,而是用于隐藏的setColumns和用于排序的sortable(列重新排序)的组合。您的提示帮助我为setColumns找到了合适的事件,称为afterSubmitForm。但是对于栏目的重新排序,我在维基上找不到任何东西。@jgosar:不客气!告诉信任,我真的不明白如何实现列隐藏和重新排序。更多其他
columnChooser
完全按照您的描述操作,并以非常舒适的方式提供拖放支持等。也许在你的问题后面加上代码可以解释一切。对于列重新排序,请搜索
remapColumns
(请参阅)。检查columnChooser的源代码可能会对您有所帮助。@jgosar:要查看
columnChooser
live,您可以打开jqGrid演示页面,在页面左侧选择“3.6版中的新功能”,然后选择“columnChooser”。在导航栏中,您可以单击“Columns”按钮并进行播放。您可以使用拖放来进行列重新排序。对于列重新排序,我只是使用内置选项“sortable”:$(“#list1”).jqGrid({sortable:true,@jgosar:i不明白您为什么要问这个问题。如果您有解决方案,为什么要问这个问题?从您的问题中完全不清楚是谁(用户还是您的软件)以及如何强制隐藏和重新排序列。有很多选项,但您不发布任何代码,也不清楚解释您的操作。您到目前为止还没有解释隐藏在代码中的工作方式。如果使用
sortable:true
进行重新排序,则可以使用
sortable.update
函数作为事件(请参阅)。我更新了答案。