【问题标题】:jqgrid filter removes one row on load oncejqgrid过滤器在加载一次时删除一行
【发布时间】:2011-12-01 14:59:28
【问题描述】:

我使用 jqgrid 构建了一个网格并启用了过滤。检索到的数据类型是 json,我正在使用 loadonce 功能。当我应用一些过滤器时,它似乎总是隐藏在记录中。我正在使用网格寻呼机只是为了在网格上添加我想要添加的额外按钮,并且我正在删除网格寻呼机按钮(下一个、最后一个等)。我删除了寻呼机,看看是否有任何冲突,但我仍然得到同样的错误。当网格加载时,我得到“查看 1 - 7 个,共 7 个”并且我可以看到 7 条记录,当我应用过滤器时,输出是“查看 1 - 3 个,共 4 个”。这意味着 4 条记录与过滤器匹配,但它一直只显示 3 条。现在,如果我清除过滤器,我会得到“查看 1 - 6 条,共 7 条”,再次缺少一条记录。我用萤火虫检查了表格,看看记录是否隐藏但仍然没有。我尝试了 firefox、chrome、IE 并且在所有浏览器中我都得到了同样的错误。 jqgrid 版本是 4.1.1。任何线索为什么会发生这种情况?

下面你可以看到代码:

jq($grid).jqGrid({
    url: $url,
    datatype: 'json',
    mtype: 'Get',
    colNames: colNamesList,
    colModel: $colModel,
    jsonReader : {
        repeatitems:false,
        id: "id",
    },
    rowNum: -1, 
    width: jq(document).width()-20,
    height: 200,
    pager: $pagerId,
    viewrecords: true,
    fixed: true,
    shrinkToFit: false,
    loadonce: true, 
    caption: $caption,
    beforeRequest: function(){
        if (!initialized) {
            jq(blockElement).block({ message: '<h1 class="loadingMsg">Grid is loading, please wait...</h1>' });
        }
    },
    loadComplete: function(data){
        if (loadCompleteCallback != null){
            loadCompleteCallback(data);
        }

        if (!initialized) {
            jq.jGrowl('"' + $caption + '" Grid loaded.', {header:'Load Notification'});
            jq(blockElement).unblock();
            initialized = true;
        }
    }
});

        if (!initialized) {
            jq.jGrowl('"' + $caption + '" Grid loaded.', {header:'Load Notification'});
            jq(blockElement).unblock();
            initialized = true;
        }
    }
});

jq($grid).jqGrid('filterToolbar',{
    stringResult: true,
    searchOnEnter : false
});

提前致谢!

【问题讨论】:

    标签: jquery jqgrid filter


    【解决方案1】:

    我不明白以下内容:为什么你从服务器返回你不想显示的一行?删除已经在服务器端的数据不是更容易吗?如果不可能,您可以删除loadComplete 内的行。顺便说一句,在当前代码中,我看不到您设置自定义过滤器的位置,这会使网格的一行不可见。

    还有一句话:你永远不应该使用rowNum: -1。只允许正值(如rowNum: 10000)。如果您使用 loadonce: true 在第一次填充网格后将 datatype 转换为 'local',这一点尤其重要。不允许使用否定的rowNum

    【讨论】:

    • @user944643:您能否发布包含从服务器返回的 JSON 数据的确切示例?您总是写关于过滤一条记录的文章,但从不描述如何您这样做。您设置了哪个过滤器以及以哪种方式设置?您能否发布足够的数据和代码,以便其他人可以重现所描述的问题?
    • 您好,所有返回的数据都是需要的,所有数据都呈现到网格中。使用过滤时,jqgrid 会从数据中丢失一条记录。我知道 loadonce 从服务器检索数据一次,然后将这些数据用作本地数据。问题是在过滤后,结果中总是缺少一条记录。关于 rowNum: -1 文档没有指定它不能取负值,当传递一个负值时,所有数据都会显示并且它似乎正在工作,至少在过滤之前是这样。我明天再检查一遍,告诉你。
    • 过滤后和排序后都会出现错误。因此,例如,如果我在网格中有以下行 ACBDE,并且标题将在排序后显示“查看 1-5 of 5”,我将拥有 BCDE,并且标题将显示:“查看 1-4 of 5”另一种情况是以下网格包含以下行 AAA AAB ABB CC 并且标题将显示:“查看 1-4 of 4”如果我输入过滤器术语“A”,我将获得以下 AAA AAB,然后标题将显示:“查看 1- 2 of 3" 总有一条记录缺失,只有排序后过滤后
    • @user944643:如果你阅读了rowNum选项here的文档的描述你会发现这句话"Set this parameter to -1 (unlimited) to disable this检查。”删除。在版本 3.7.2 之前(在引入本地排序和过滤以及 loadonce 选项之前)它是允许的。后来不多了。如果您使用本地数据或loadonce: true 选项,那肯定是错误的。
    • 您好 Oleg,我将 rowNum 更改为接收到的最大结果数,问题已解决。奇怪的想法是为什么它在加载网格时工作并显示所有记录并在过滤或排序后分解。无论如何,我假设这将在 jqgrid 的未来版本中得到修复,以便显示所有行。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 2011-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-27
    • 1970-01-01
    • 2013-02-16
    相关资源
    最近更新 更多