5

是否可以将最后一列冻结到网格的右侧?

我遇到的所有演示都显示将第一列或第一列和第二列冻结到网格的左侧。

我尝试使用frozen:true属性仅在 colModel 中的最后一列,但它不起作用。

4

2 回答 2

3

jqGrid 中冻结列的当前实现不允许将最后一列冻结到网格的右侧。所以我看不到在 jqGrid 中实现您的要求的任何简单方法。

复杂的原因在于 jqGrid 中冻结列的实现。该方法从左边setFrozenColumns开始检查(从数组的第一个索引开始)(参见源代码部分)。它找到具有属性的最大索引,然后在单独的 div 中复制网格的列。换句话说,jqGrid 只考虑具有属性的第一列。所有其他具有的属性将被忽略。然后 jqGrid 始终创建仅具有左冻结列的 divcolModel colModelcolModelfrozen: truecolModelfrozen: truefrozen: true. 因此未提供网格右侧冻结列的使用。

于 2014-12-26T11:21:00.590 回答
1

您看到所有演示都只冻结左侧列,因为 jqGrid 根本不可能冻结右侧列或不相邻的列(尝试冻结第 1 列和第 3 列而不是第 2 列,这将仅冻结第 1 列. 同样冻结第 1、2 和 4 列而不是第 3 列将仅冻结第 1 列和第 2 列)。

在 jqGrid 的代码片段下方,它强加了这样的规则(请参阅带有注释的 while 循环from left, no breaking frozen)。如果您对允许冻结右侧列是认真的,您可以尝试根据您的要求对 jqGrid 代码进行修改。

setFrozenColumns : function () {
        return this.each(function() {
            if ( !this.grid ) {return;}
            var $t = this, cm = $t.p.colModel,i=0, len = cm.length, maxfrozen = -1, frozen= false;
            // TODO treeGrid and grouping  Support
            if($t.p.subGrid === true || $t.p.treeGrid === true || $t.p.cellEdit === true || $t.p.sortable || $t.p.scroll )
            {
                return;
            }
            if($t.p.rownumbers) { i++; }
            if($t.p.multiselect) { i++; }

            // get the max index of frozen col
            while(i<len)
            {
                // from left, no breaking frozen
                if(cm[i].frozen === true)
                {
                    frozen = true;
                    maxfrozen = i;
                } else {
                    break;
                }
                i++;
            }
于 2014-12-25T06:29:58.813 回答