【发布时间】:2017-01-27 11:04:47
【问题描述】:
我有一些这样隐藏的行:
$("#"+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();
}
我试过了,效果很好。但我不是很“喜欢”这个解决方案。
【问题讨论】:
-
您使用哪些标准来选择需要隐藏的行?您在哪里获得/持有相应的 rowid?您在代码的哪一部分隐藏了行?您使用(可以使用)哪个 jqGrid 版本以及来自哪个 jqGrid 分支(free jqGrid、商业Guriddo jqGrid JS 或版本
-
我在 4.6 版中使用免费的 jqGrid。我无法改变它。
-
你的代码和我问你的其他问题怎么样?
-
对不起,我按“enter”返回到该行,因此发表了评论。无论如何(对不起我的英语不好)。我有允许在某些条件下显示行的复选框(例如:如果字段“名称”为空,则隐藏行)。我隐藏了侦听器复选框中的行。
-
英文没问题。我相信我可以帮助你,但你应该发布一些代码,让你了解你在做什么。一般来说,您可以将隐藏行的 id 列表作为 jqGrid 的新自定义选项。您可以使用
rowattr隐藏行。就是这样。如果还不够清楚,那么您应该附加一些代码片段,以演示您的工作。我可以修改代码以显示我的意思。
标签: javascript jquery jqgrid