我有一些我隐藏的行:
$("#"+rowid).hide();
我的问题是,当用户点击排序colmun时,隐藏的行重新出现。有办法避免这种情况吗?
修改
我将尝试用代码示例更多地解释一下我所做的事情。 我开始用这个参数创建我的网格(并且没有数据)。
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();
}
我尝试了它并且它有效。但我对这个解决方案并不是“粉丝”。
答案 0 :(得分:1)
我发现在显示数据页面后隐藏了一些行并非最佳选择。主要缺点是将显示的行数。只有在需要显示一页数据时,才能在$("#"+rowid).hide();
内安全使用loadComplete
方法。即使在这种情况下,也可以看到一些不正确的信息例如,可以使用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将首先根据过滤规则过滤本地数据,然后它将显示当前的数据页面。结果你将获得完美的结果。
对此类网格进行排序不会改变过滤器。
答案 1 :(得分:0)
创建表后不要隐藏列,在使用选项hidden
创建网格时直接隐藏它们,如下所示:
colNames: ['Id', ...],
colModel: [
{ key: true, hidden: true, name: 'Id', index: 'Id' },
....
]
如果您想在创建网格后隐藏特定事件的列,请查看this文章。
希望你在寻找。