我有一些像这样隐藏的行:
$("#"+rowid).hide();
我的问题是,当用户单击对列进行排序时,隐藏的行会重新出现。有办法避免这种情况吗?
编辑
我将尝试用代码示例进一步解释一下我所做的事情。 我开始使用此参数(并且没有数据)创建网格。
var params = {
datatype: "local",
data: [],
caption: "Grid",
colNames:[ "Column A", "Column B" ],
colModel:[
{ name:"colA", key: true },
{ name:"colB" }
]
};
由于某些原因,我重新加载接下来的网格数据,如下所示:
$("#myGrid").jqGrid("clearGridData")
.jqGrid("setGridParam", { data: myDatas })
.trigger("reloadGrid");
我有带有听众的复选框,就像这样:
$("#checkbox1").on("change", onCheckbox1Changed);
function onCheckbox1Changed() {
var rowid = ...;
var datas = $("#myGrid").jqGrid("getRowData");
for(var key in datas) {
if(datas[keys].colB === "" && $("#checkbox1").val() === true) {
$("#"+rowid).show();
} else if(datas[keys].colB === "" && $("#checkbox1").val() === false) {
$("#"+rowid).hide();
}
}
}
这段代码的工作方式符合我的要求。根据复选框隐藏/显示行。问题是当我单击某一列对其进行排序时,隐藏的列重新出现。
编辑2
我可以强制网格在排序后隐藏行。但我没有找到在哪里可以找到像“afterSort”这样的事件。有“onSortCol”,但它是在排序之前调用的。
解决方案是使用“loadComplete”强制执行。像这样:
var params = {
// ...
loadComplete: onLoadComplete
}
function onLoadComplete() {
onCheckbox1Changed();
}
我试过了,有效。但我不太“喜欢”这个解决方案。
最佳答案
我发现显示数据页面后隐藏一些行不是最佳选择。主要缺点是显示的行数。仅当您需要显示一页数据时,您才可以安全地使用 loadComplete
内部的 $("#"+rowid).hide();
方法。即使在这种情况下,人们也可以看到一些不正确的信息。例如,可以使用 viewrecords: true
选项,将“View 1 - 10 of 12”等文本放置在寻呼机的右侧。
我个人建议您过滤数据。您需要向网格添加 search: true
选项并指定 postData.filters
,这排除某些行的显示:
search: true,
postData: {
filters: {
groupOp: "AND",
rules: [
{ field: "colA", op: "ne", data: "rowid1" },
{ field: "colA", op: "ne", data: "rowid2" }
]
}
}
如果您想从旧的 jqGrid 4.6 升级到免费 jqGrid 的当前版本 (4.13.6),那么您可以使用 "ni"
(NOT IN) 操作:
search: true,
postData: {
filters: {
groupOp: "AND",
rules: [
{ op: "ni", field: "id", data: "rowid1,rowid2" }
]
}
}
在这两种情况下,jqGrid都会首先根据过滤规则过滤本地数据,然后显示当前页的数据。因此,您将获得完美的结果。
对此类网格进行排序不会改变过滤器。
关于javascript - 对列进行排序显示 jqGrid 中的隐藏行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41892486/