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