2012-03-06 119 views
2

简单的问题。是否有一个函数可以在网格中按名称获取列的当前排序位置?jqGrid排序索引按列名称

+0

你的意思的索引网格排序的'colModel'中的列? – Oleg 2012-03-06 07:39:50

+0

是啊,我正在尝试使用remapColumns更改顺序。我有一个基于列名称的新排序顺序列表,但我需要获取索引。我似乎无法让它继续前进。 – Sequenzia 2012-03-06 08:12:16

回答

3

remapColumns方法中使用的索引与colModel数组中的相同。理解这一点非常重要,这些索引可以与最初使用的jqGrid的colModel参数不同。如果jqGrid使用选项rownumbers: true,则将在colModel数组的第一个位置插入名为'rn'的附加列。 colModel数组的所有其他元素的索引将递增。以相同的方式,选项multiselect: true插入列'cb' abd选项subGrid: true插入列'subgrid'。以相同的方式,选项treeGrid: true后面追加colModel数组与一些额外的隐藏列名称可以由treeReader定义。在treeGridModel: 'nested'情况下,列的默认名称为:'level''lft''rgt''isLeaf''expanded',在treeGridModel: 'adjacency'情况下'loaded''icon''level''parent''isLeaf''expanded''loaded''icon'

所以要通过名称找到列的索引,您应该只获取当前的colModel,查看项目并查找'name'属性是您需要的列名称的项目。要获得colModel,您可以使用$("#grid")[0].p.colModel$("#grid").jqGrid('getgridParam', 'colModel')。因此,代码可以像下面这样:

var getColumnIndexByName = function (columnName) { 
     var cm = $(this).jqGrid('getGridParam', 'colModel'), i, l = cm.length; 

     for (i = 0; i < l; i++) { 
      if (cm[i].name === columnName) { 
       return i; // return the index 
      } 
     } 
     return -1; 
    }; 

和像

var $grid = $("#grid"), 
    iCol = getColumnIndexByName.call($grid[0], 'myColName'); 

使用情况,以让你可以使用目前的排序列名$grid.jqGrid('getGridParam', 'sortname')

+0

再次感谢您的帮助。这很好。我知道我无法使用colModel的原始顺序来执行此操作。我注意到rownumbers增加了另外一栏,就像你解释的那样,还有很多其他的方式不一样。再次,这工作完美,但。再次感谢。 – Sequenzia 2012-03-08 04:16:46

+0

@Sequenzia:不客气! – Oleg 2012-03-08 05:57:17