我分析了你的问题并创建了the demo http://www.ok-soft-gmbh.com/jqGrid/FrozenColumns.htm它演示了如何解决问题。该演示生成具有冻结第一列的网格:
我在 jqGrid 中冻结列的当前(版本 4.3.1)实现中发现了一些错误,稍后将发布我的建议如何修复 trirand。问题如下:
在以下情况下,人们可以特别清楚地看到第一个问题:datatype: 'local'
网格初始化期间将填充网格的数据。看对应的演示 http://www.ok-soft-gmbh.com/jqGrid/FrozenColumns0.htm我刚刚调用了该方法setFrozenColumns
。从图片上就能看出问题
可以看到,只有列标题会被冻结,但包含行号列的网格体会滚动。怎样才能看出下一个演示 http://www.ok-soft-gmbh.com/jqGrid/FrozenColumns1.htm调用该方法就足够了_complete
调用后直接setFrozenColumns
解决问题:
$grid.jqGrid('setFrozenColumns');
$grid[0].p._complete.call($grid[0]);
where $grid
定义为var $grid = $('#list');
.
下一个问题是_complete
方法计算列标题固定部分的位置(保存在$grid[0].grid.fhDiv
)和网格体的固定部分(保存在$grid[0].grid.fbDiv
)仅使用标准网格标题(网格标题)的高度。所以如果你使用setCaption
要更改标题,您可以在错误的位置“冻结”潜水。的召唤_complete
后的方法setCaption
不会解决问题,但结果仍然如下the demo http://www.ok-soft-gmbh.com/jqGrid/FrozenColumns2.htm:
为了解决这个问题,我编写了非常简单的函数fixPositionsOfFrozenDivs
var fixPositionsOfFrozenDivs = function () {
if (typeof this.grid.fbDiv !== "undefined") {
$(this.grid.fbDiv).css($(this.grid.bDiv).position());
}
if (typeof this.grid.fhDiv !== "undefined") {
$(this.grid.fhDiv).css($(this.grid.hDiv).position());
}
};
固定冻结潜水的位置。
最后我改变了一点实现loadComplete
至以下内容:
loadComplete: function () {
var $this = $(this), newCapture = "", filters, rules, rule, op, i, iOp,
postData = $this.jqGrid("getGridParam", "postData"),
isFiltering = $this.jqGrid("getGridParam", "search");
if (isFiltering === true && typeof postData.filters !== "undefined") {
filters = $.parseJSON(postData.filters);
newCapture = "Filter: [";
rules = filters.rules;
for (i = 0; i < rules.length; i++) {
rule = rules[i];
op = rule.op; // the code name of the operation
iOp = $.inArray(op, arOps);
if (iOp >= 0 && typeof $.jgrid.search.odata[iOp] !== "undefined") {
op = $.jgrid.search.odata[iOp];
}
newCapture += rule.field + " " + op + " '" + rule.data + "'";
if (i + 1 !== rules.length) {
newCapture += ", ";
}
}
newCapture += "]";
}
$this.jqGrid("setCaption", newCapture);
fixPositionsOfFrozenDivs.call(this);
}
其中数组arOps
定义为
var arOps = ["eq", "ne", "lt", "le", "gt", "ge", "bw", "bn", "in", "ni", "ew", "en",
"cn", "nc"];
结果就会有the demo http://www.ok-soft-gmbh.com/jqGrid/FrozenColumns.htm我在答案开头引用了这一点。如果您在搜索过滤器工具栏或高级搜索对话框中输入一些过滤器,网格的标题将被更改(就像在原始示例中一样),但所有冻结的潜水都将具有正确的位置。