Jquery JQGrid:将列重置为原始顺序和状态

Jquery JQGrid:将列重置为原始顺序和状态,jquery,jqgrid,Jquery,Jqgrid,我使用jqGrid选项sortable:true,还使用columnChooser插件。 我想创建一个重置按钮,它将 将列重新排序为原始状态 添加回columnChooser插件可能隐藏的所有列。这是我能够完成使用提供的答案 但是,如何完成第一点,将列重新排序到原始状态。恢复所有列的隐藏状态非常简单,您已经找到了相应的代码示例。因此,我回答了如何重置列顺序 问题在于,可用于对列重新排序的方法remapColumns使用列编号而不是列名。同样的问题也存在于jqGrid的许多其他方法或内部参数中。要

我使用jqGrid选项
sortable:true
,还使用columnChooser插件。 我想创建一个重置按钮,它将

  • 将列重新排序为原始状态
  • 添加回columnChooser插件可能隐藏的所有列。这是我能够完成使用提供的答案

  • 但是,如何完成第一点,将列重新排序到原始状态。

    恢复所有列的
    隐藏状态非常简单,您已经找到了相应的代码示例。因此,我回答了如何重置列顺序

    问题在于,可用于对列重新排序的方法
    remapColumns
    使用列编号而不是列名。同样的问题也存在于jqGrid的许多其他方法或内部参数中。要使用方法
    remapColumns
    ,需要使用基于当前索引顺序的列索引。在用户多次更改列的顺序后,将很难提供相对于当前列顺序所需的列编号。保存列的名称比保存列索引要容易得多

    在Tony更改jqGrid的许可协议并将其重命名为之后,我发展成为jqGrid的分支。我在jqGrid中实现了许多改变,这些改变扰乱了我的工作,并实现了许多新特性。其中一个变化是,在不破坏与以前版本的兼容性的情况下,尽可能将所有内部选项移动到保留名称而不是索引。我添加了方法
    remapColumnsByName
    ,它简化了列重新映射的使用(请参见)

    在免费jqGrid中实现您的需求可能非常简单。您只需将原始列顺序保存在数组中,然后将其用作
    remapColumnsByName
    的参数来重置列

    $(“#grid1”).jqGrid({
    ...
    onInitGrid:函数(){
    var p=$(this.jqGrid(“getGridParam”);
    //在jqGrid的自定义选项中保存列的名称
    p、 originalColumnOrder=$.map(p.colModel,function(cm){
    返回cm.name;
    });
    //警报(JSON.stringify(p.originalColumnOrder));
    }
    }).jqGrid(“navGrid”,{add:false,edit:false,del:false})
    .jqGrid(“navbuttonad”{
    纽特尼康:“fa重复”,
    标题:“,
    标题:“重置原始列顺序”,
    onclick按钮:函数(){
    var$self=$(this),p=$self.jqGrid(“getGridParam”);
    $self.jqGrid(“remapColumnsByName”,p.originalColumnOrder,true);
    }});
    
    请看演示

    如果由于某些原因无法迁移到免费jqGrid,那么必须模拟相同的行为。您应该将原始列顺序保存为列名数组,然后在调用
    remapColumns
    之前直接将名称转换为索引。它应该也能工作。

    根据我在讨论中读到的一些答案,我能够用我们的网格创建一个“重置列”功能(我很乐意给予赞扬,但这是对不同问题的许多不同解决方案的拼凑,我没有全部跟踪)

    它将恢复可见性、列顺序和冻结状态。如果通过“新建列”菜单功能修改了列状态,也可以使用

    (dgColModel是包含原始colModel的全局变量)

    函数重置列(网格){
    //remapArray:0是行号,1是选择复选框
    var i=0,cmi,l=dgColModel.length,remapArray=[0,1];
    对于(;i对于(;i将列重新排序为原始状态

    我刚刚遇到了这个问题,我用一个简单的javascript函数实现了这个功能

    初始化网格时,首先获取列顺序:

    var initialcolumnorder = $("#Grid").getGridParam('colNames');
    
    在需要时调用以下函数,并将
    initialcolumnorder
    作为参数

    function resetColumnOrder(initialcolumnorder)
    {  
         var currentColumnOrder = $("#Grid").getGridParam('colNames');
         var columnMappingArray = [];
         $.each(initialcolumnorder, function (index, value) {
             var currentIndex = $.inArray(value, currentColumnOrder);
             columnMappingArray.push(currentIndex);   
         });
    
         $("#Grid").remapColumns(columnMappingArray, true, false);
    }
    

    我认为这个演示一定很有帮助。是的,使用演示中的同一个示例,我能够获得所有列。但是,我无法将列重新排序到原始状态。演示没有列重新排序。您可以将colModel保存在变量中,然后,当您想要返回原始状态时,只需使用colModel数据即可他在这里的回答有帮助吗?我已经做了与问题中提到的相同的事情。但是,它并没有重置列顺序
    function resetColumnOrder(initialcolumnorder)
    {  
         var currentColumnOrder = $("#Grid").getGridParam('colNames');
         var columnMappingArray = [];
         $.each(initialcolumnorder, function (index, value) {
             var currentIndex = $.inArray(value, currentColumnOrder);
             columnMappingArray.push(currentIndex);   
         });
    
         $("#Grid").remapColumns(columnMappingArray, true, false);
    }