0

我有一个像这样设置的 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 执行类似排序的整数?我也不需要第一次排序,因为我的服务器按第一列排序。用户可能希望它按第二列排序

4

1 回答 1

1

您应该为这种类型的排序使用自定义函数。

为此,将 jqgrid 的排序类型属性设置为您的自定义函数。如该链接中所述,排序类型可以具有以下值。

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 在这个问题的答案中找到的这个链接。)

 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';

}

},

顺便说一句,您可以设置sortnamejqgrid 的属性来设置一个列用于初始加载时间排序。

于 2013-04-11T04:26:11.693 回答