2013-04-10 28 views
0

我有一个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

对于此类型的排序,您应该使用自定义函数。

为此,请将jqgrid的排序类型属性设置为您的自定义函数。如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. 

和自定义功能可以是这样的:(从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属性设置为为初始加载时间排序设置一列。

+1

+1定义为函数的'sorttype'的使用是正确的方法。在比较列项目之前,jqGrid允许*规范*值。归一化值将在执行排序算法期间的比较操作中使用。定义为函数的'sorttype'进行规范化。 [答案](http://stackoverflow.com/a/5296935/315935)更接近用户想要的。最大的问题只是用户没有明确指定数据的格式。在纯HEX数据的情况下,可以使用'parseInt(value,16)',但是在输入数据更复杂的情况下,标准化会更复杂。 – Oleg 2013-04-11 06:37:00