2012-03-06 117 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