我使用jqgrid构建了一个网格,并启用了过滤功能。检索的数据类型是json,我正在使用loadonce功能。当我应用一些过滤器时,它似乎总是隐藏在记录上。我正在使用网格寻呼机只是为了拥有我想在网格上添加的额外按钮,我正在删除gridpager按钮(下一个,最后一个等等)。我删除了寻呼机,看看是否有任何冲突,但我仍然得到同样的错误。当网格加载时我得到'View 1 - 7 of 7'并且我可以看到7条记录,当我应用过滤器时,输出是'View 1 - 3 of 4'。这意味着4条记录与过滤器匹配,但它只保持显示3.现在,如果我清除过滤器,我得到“查看1 - 6的7”,再次丢失一条记录。我用firebug检查了表,看看记录是否隐藏但仍然没有。我尝试了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
});
提前致谢!
答案 0 :(得分:5)
我不明白以下内容:为什么你从服务器返回一个你不想要显示的行?删除服务器端已有的数据是不是更容易?如果不可能,您可以删除loadComplete
内的行。顺便说一句,在当前的代码中我看不到你在哪里设置自定义过滤器,这使得网格的一行不可见。
还有一句话:你永远不应该使用rowNum: -1
。只允许正值(如rowNum: 10000
)。如果您使用loadonce: true
在第一次填充网格后将datatype
改为'local'
,这一点尤其重要。不允许使用否定rowNum
。