jqGrid文本排序顺序

时间:2013-04-10 21:12:51

标签: jqgrid

我有一个像我这样设置的jqGrid

gridAltMpn.jqGrid({ 
  autowidth: true,
  shrinkToFit: true,
  datatype : 'local', 
  data : input, 
  height : '100',
  scrollrows: true,
  scrollOffset : '0', 
  hidegrid : false,
  colNames : [ 'P', 'MPN' ],
  colModel : [ 
     { name : 'Col1', width : 30, align:'center' }, 
     { name : 'Col2', width : 250, sorttype: 'integer'} 
  ],
  pager : '#altmpn_pager', 
  pagerpos : 'left', 
  scroll: 50,
  gridview : true, 
  caption : 'A useful table title',
  emptyRecordText : '<div id="no_data_msg" style="text-align:center"> No Results Found</div>', 
  hoverrows : true,      
  onSelectRow: function(id) {
     var gsr = gridAltMpn.jqGrid('getGridParam', 'selrow');
     if (gsr) {
        var rowData = gridAltMpn.jqGrid('getRowData', gsr);
        if ($("input[name='optInvInqType']:checked").val() == 'MPN') {
           getInvInq("MPN", rowData.MPN);
        }
     }
  },
  loadComplete: function() { 
     gridAltMpn.setSelection(gridAltMpn.getDataIDs()[0], true); 
  }
});

此网格中的数据如下所示

XX 774860A6                   
   774860A8                   
   774860A4                   
   774860A3                   
   774860A10                  
   STARTER, PNEUM,PW4000 

当第一次加载网格时,它很好,但如果用户想要按第二列排序,它会像这样结束

   774860A10                  
   774860A3                   
   774860A4                   
XX 774860A6                   
   774860A8                   
   STARTER, PNEUM,PW4000      

774860A10应该像整数排序一样追随774860A8。我不能使用整数排序,因为这些不是整数,因为那里有一些字母字符。换句话说,我希望文本条目排序为整数。我是否需要使用自定义排序例程然后使用我的Javascript来执行类似排序的整数?我也不需要在第一次排序,因为我的服务器按第一列对其进行排序。用户可能希望按第二列排序

1 个答案:

答案 0 :(得分:1)

您应该使用自定义函数进行此类排序。

为此,请将jqgrid的sort type属性设置为自定义函数。如this link中所述,排序类型可以具有以下值。

sorttype:

int/integer - for sorting integer
float/number/currency - for sorting decimal numbers
date - for sorting date
text - for text sorting
function - defines a custom function for sorting. To this function we pass the value to be sorted and it should return a value too.

自定义函数可以是这样的:(来自Oleg对this link的回答中的this question。)

 colModel: [

{name:'Posn', index:'Posn', width:100, sorttype:

function(cell)

{
//Here you have to apply your own logic
if (cell=='GK') return '0';//returns the sort order 

if (cell=='DEF') return '1';

if (cell=='MID') return '2';

if (cell=='STR') return '3';

}

},

顺便说一下,您可以设置jqgrid的sortname属性来设置初始加载时间排序的列。