如何在jqgrid中持久化当前行

如何在jqgrid中持久化当前行,jqgrid,Jqgrid,如果再次打开网格或刷新页面,如何预先列出当前行 中的答案描述了如何保持列宽和其他一些参数 在这个回答演示中,我在某一行单击并按下F5。上一个单击的行未高亮显示。 如何在本地存储中保存/恢复当前行 更新 若在应用程序中修改了jqGrid柱结构,并且用户再次从浏览器打开应用程序, restorecolumnstate在缺少某些元素的情况下创建了无效的colmodel。这会导致refreshSearchingToolbar中出现异常,该异常假定所有colmodel元素都存在 如何解决这个问题?在这种情

如果再次打开网格或刷新页面,如何预先列出当前行

中的答案描述了如何保持列宽和其他一些参数

在这个回答演示中,我在某一行单击并按下F5。上一个单击的行未高亮显示。 如何在本地存储中保存/恢复当前行

更新

若在应用程序中修改了jqGrid柱结构,并且用户再次从浏览器打开应用程序, restorecolumnstate在缺少某些元素的情况下创建了无效的colmodel。这会导致refreshSearchingToolbar中出现异常,该异常假定所有colmodel元素都存在

如何解决这个问题?在这种情况下,如何删除修改过的colmodol而不恢复colmodel?或者restoreColumnState是否应该更新colModel以便创建正确的数组

**更新2**

如果myColumnState.permutation包含空值
$grid.jqGrid(“remapColumns”,myColumnState.permutation,true)
创建了无效的colmodel。下面是VS debugger在remapColumns调用前后的屏幕截图

之后:

我通过将代码更改为

    if (isColState && myColumnsState.permutation.length > 0) {
        var i, isnull = false;
        for (i = 0; i < myColumnsState.permutation.length; i = i + 1) {
            if (myColumnsState.permutation[i] == null) {
                isnull = true;
                break;
            }
        }
        if (!isnull) {
            $grid.jqGrid("remapColumns", myColumnsState.permutation, true);
        }
if(isColState&&myColumnsState.permutation.length>0){
变量i,isnull=false;
对于(i=0;i
这是最好的解决方案吗?

我将关于持久化jqGrid列首选项的代码与的代码相结合,从中我建议了实现持久化行选择的代码。值得一提的是,在
multiselect:true
的情况下,将使用包含所有select的选定行的ID数组即使这些行在另一个页面上。这很实用,实现也很简单。所以我发布了相应的,但它一直没有得到回复

现在我可以展示两个演示:使用
multiselect:true
,使用相同的代码,但只有一个选项

下面是我使用的代码中最重要的部分

有一件事非常重要,值得一提:您应该在您使用的每个页面中修改
myColumnStateName
的值。变量的值包含
localStorage
中列状态的名称。因此,您不会更改名称,您将共享不同表的状态,这些表可以随附在后面您可以考虑使用当前页面名称或其URL作为“代码> MyCalpNestStNeNe>/Calp>.< /P>的值构造的名称。
var$grid=$(“#列表”),
getColumnIndex=函数(网格,columnIndex){
var cm=grid.jqGrid('getGridParam','colModel'),i,l=cm.length;
对于(i=0;i0){
标记名=控件[0]。标记名.toUpperCase();
如果(标记名==“选择”){/&&cmi.stype==“选择”
控件。查找(“选项[值=“”]”)
.attr('selected','selected');
}else if(标记名==“输入”){
对照组:val(“”);
}
}
}
if(typeof(postData.filters)=“string”&&
typeof($grid[0].ftoolbar)==“boolean”&&$grid[0].ftoolbar){
filters=$.parseJSON(postData.filters);
if(filters&&filters.groupOp==”和“&&typeof(filters.groups)==”未定义“){
//只有在不分组的情况下进行提前搜索时,我们才会在
//搜索工具栏
规则=过滤器。规则;
对于(i=0,l=rules.length;i=0){
cmi=cm[iCol];
control=$(“#gs_quot+$.jgrid.jqID(cmi.name));
如果(control.length>0&&
(((typeof(cmi.searchoptions)==“未定义”||
typeof(cmi.searchoptions.sopt)==“未定义”)
&&rule.op==myDefaultSearch)||
(typeof(cmi.searchoptions)=“对象”&&
$.isArray(cmi.searchoptions.sopt)&&
cmi.searchoptions.sopt.length>0&&
cmi.searchoptions.sopt[0]==rule.op))){
标记名=控件[0]。标记名.toUpperCase();
如果(标记名==“选择”){/&&cmi.stype==“选择”
control.find(“选项[value=”+$.jgrid.jqID(rule.data)+“]”)
.attr('selected','selected');
}else if(标记名==“输入”){
control.val(规则数据);
}
}
}
}
}
}
},
saveObjectInLocalStorage=函数(storageItemName,对象){
如果(赢的类型)
var previousSelectedTh = ts.grid.headers[ts.p.lastsort].el, newSelectedTh = ts.grid.headers[idxcol].el;
saveColumnState = function(perm) {
...
  columnsState = {
    search: this.jqGrid('getGridParam', 'search'),
    page: this.jqGrid('getGridParam', 'page'),
    sortname: this.jqGrid('getGridParam', 'sortname'),
    sortorder: this.jqGrid('getGridParam', 'sortorder'),
    lastsort: this.jqGrid('getGridParam', 'lastsort'),
    permutation: perm,
    colStates: { }
  },
...
},

loadComplete: function(data) {
...
  if (isColState) {
    $this.jqGrid("remapColumns", myColumnsState.permutation, true);
    if(myColumnsState.lastsort > -1)
      $this.jqGrid("setGridParam", { lastsort: myColumnsState.lastsort });
  }
...
},