JQGrid - 冷冻柱 - 冷冻柱到网格的右端

时间:2014-12-18 14:50:30

标签: javascript jquery jqgrid frozen-columns

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

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

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

2 个答案:

答案 0 :(得分:3)

jqGrid中当前冻结列的实现不允许将最后一列冻结到网格的右侧。因此,我没有看到在jqGrid中实现您的需求的任何简单方法。

复杂性的原因在于jqGrid中冻结列的实现。方法setFrozenColumns从左侧检查colModel (来自colModel数组的第一个索引)(请参阅源代码的the part)码)。它找到具有colModel属性的frozen: true的最大索引,然后在单独的div中对网格的列进行复制。换句话说,jqGrid仅考虑colModel的第一列frozen: true属性。具有frozen: true的所有其他属性将被忽略。然后jqGrid始终使用左侧冻结列 创建 div。因此,未提供网格右侧的冻结列的使用。

答案 1 :(得分:1)

您看到所有演示仅冻结左侧列,因为jqGrid无法冻结右侧列或不相邻的列(尝试冻结列1和3但不是2,这将冻结类似地冻结第1,2和4列而不是第3列将仅冻结第1列和第2列。

在jqGrid的代码片段下面,它强加了这样的规则(引用带有注释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++;
            }