【问题标题】:JqGrid : Restore state inluding column filters after column rearangeJqG​​rid:在列重新排列后恢复状态,包括列过滤器
【发布时间】:2012-01-12 09:56:39
【问题描述】:

我需要在重新调整大小、重新排序、隐藏列之后保存网格中的状态。

一切正常,除了列过滤器(下拉菜单、文本字段、日期选择器)在包含过滤器的列被移动后(collumnhooser)没有恢复到正确的列中。

使用下面的 JavaScript,我可以恢复大部分我需要的内容(列的大小、顺序和可见性),但恢复正确列中的过滤器不起作用。 (过滤器出现在它们应该出现的位置之后的几列。

var listName = jQuery('#list').jqGrid('getGridParam', 'customName');

var colModel = LoadColumnModel(listName);
var perm = jQuery.cookies.get(listName + '_list_perm');
var rowNumber = jQuery.cookies.get(listName + '_list_rowNumber');

if (colModel) {
    var grid = jQuery('#list');
    for (var i = 0; i < colModel.length; i++) {
        var column = colModel[i];
        if (column.hidden) {
            grid.jqGrid('hideCol', column.name);
        };
        ***//I hoped next line would do the trick, but it didn't :(***
        if (column.search && column.searchoptions) {
            grid.jqGrid('setColProp', column.name, { search: true, searchoptions:   column.searchoptions });
        };
    }
    grid.jqGrid('setGridParam', { colModel: colModel });
    loadGrid = false;
    if (rowNumber) {
        grid.jqGrid('setGridParam', { rowNum: rowNumber });
        jQuery('.ui-pg-selbox').val(rowNumber);
    }
    grid.trigger('reloadGrid');
    if (perm) {
        grid.jqGrid("remapColumns", perm, true);
    }
}

有人知道吗?

【问题讨论】:

    标签: jqgrid filter state restore


    【解决方案1】:

    您不应该在网格中设置searchoptions。取而代之的是,您可以保存/恢复 jqGrid 的 postData 参数。

    我建议您查看the answerthe answerthis one。它展示了如何实现网格状态的保存/恢复。由于我在the answer 中解释的原因,我使用了localStorage 而不是cookie。

    【讨论】:

    • 感谢所有丰富信息的链接,但我不需要postData(没有选择时不包含太多信息),我只需要出现右侧的过滤器重新排列网格后的列和列已重新排序/隐藏。目前我不需要过滤器的值。
    • @Steven:在搜索时查看postData。它包含有关搜索过滤器的完整信息。例如,查看来自the answer 的演示。您对“过滤器”的意思是什么?它可以以多种方式解释。您使用高级搜索还是filterToolbar?任何类型的搜索都是网格应用的过滤器。如果您需要重新填充搜索工具栏,请查看another answer
    • 感谢您的快速回答,很抱歉没有准确指出我的问题。我确实是指出现在列标题下方和网格数据上方的过滤器工具栏。我为许多列使用“下拉过滤器”。但我的问题不是在搜索后恢复选定的值,而只是在过滤器工具栏的右栏中恢复过滤器位置。此时,当我重新排列 collumchooser 中的列时,更改列顺序(columnindex)或隐藏它们。过滤器不会出现在其相应的列中。如果我能在其中找到解决方案,我会研究您的示例。
    • @Steven:这应该是你的实现中的一个错误。尝试从the old answerthe demo 上重现相同的内容,我在回答中引用了该内容。您可以隐藏一些列,更改列顺序,设置一些过滤器等,然后重新加载页面或再次打开它。您将看到与以前完全相同的数据。我可以看到的过滤器工具栏中的位置没有问题。
    • 是的,这正是我所需要的,但我未能将我的机制重构为你的,因为它是一种完全不同的方法。顺便说一句,我认为您的网格中也存在一个小错误,当通过 columnchooser 重新排列列时,在离开页面后立即不会恢复 collumnhooser 中定义的状态。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-29
    • 2011-09-10
    • 2014-07-28
    • 2012-01-16
    • 2014-07-22
    • 1970-01-01
    • 2014-08-27
    相关资源
    最近更新 更多