【问题标题】:jqGrid text Sort OrderjqGrid 文本排序顺序
【发布时间】:2013-04-10 21:12:50
【问题描述】:

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

【问题讨论】:

    标签: jqgrid


    【解决方案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,在 Oleg 为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 使用定义为函数的sorttype 是正确的方法。在比较列项之前,jqGrid 允许对值进行规范化。在执行排序算法期间,标准化值将用于比较操作。 sorttype 定义为函数进行规范化。 The answer 更接近用户想要的。最大的问题只是用户没有准确指定数据的格式。如果是纯 HEX 数据,可以使用parseInt(value,16),但如果输入数据更复杂,规范化会更复杂。
    猜你喜欢
    • 2012-12-22
    • 2011-04-13
    • 2012-12-15
    • 2013-12-28
    • 1970-01-01
    • 2013-02-02
    • 1970-01-01
    • 1970-01-01
    • 2022-10-02
    相关资源
    最近更新 更多