2015-10-19 12 views
2

我面临着与在JQ电网排序,当我在列中的数据完全排序两个上升数据输入简单的文字和降序排列如排序问题最新JQ电网

hello 
test 
master 
data 
lazy 

问题,但是当我给某种复杂的字符串的它不以正确的方式例如

001abc_Basic_Contract 
100xyz_Basic_Contract 
123_Basic_Contract 
234_Basic_Contract 
a_b_c_Basic_Contract 
abc_Basic_Contract 
abc001_Basic_Contract 
Basic_Contract 
Doc_1_Basic_Contract 
Doc_13_Basic_Contract 
Doc_14_Basic_Contract 
EFAIL 
EXE_Design_SG_DD 
IDCMSExcellus 
Letter_Design 
SBCv1 
SortTest_Basic_Contract 
SortTest_Basic_Contract 
TA 
Tango 
test_Basic_Contract 
xyz_Basic_Contract 

当我给上述数据,因为它不以正确的方式执行排序的列数据执行排序。

$("#grid").jqGrid({ 
     data:mydata, 
     datatype: "local", 

     height: 250, 
      colNames:['Inv No','Date', 'Client', 'Amount','Tax','Total','Notes'], 
      colModel:[ 

       {name:'id',index:'id', width:60, sorttype:"int"}, 
       {name:'invdate',index:'invdate', width:90, formatter: 'date', formatoptions: { srcformat: 'ISO8601Long', newformat: 'Y-m-d H:i:s'}, sortable :true}, 
       {name:'name',index:'name', width:100 , sorttype:'text', sortable:true }, 
       {name:'amount',index:'amount', width:80, align:"right"}, 
       {name:'tax',index:'tax', width:80, align:"right"},  
       {name:'total',index:'total', width:80,align:"right"},  
       {name:'note',index:'note', width:150}  
      ], 
      multiselect: true, 
      sortable:false, 

     }); 

如果我在Microsoft Excel中对上述数据进行排序,它会给出不同的排序顺序。

请在这方面帮助我。

+0

首先,您使用的jqGrid的版本(什么是 “最新JQ网格”)?您使用的是哪个jqGrid的分支([免费jqGrid](https://github.com/free-jqgrid/jqGrid),[Guriddo jqGrid JS](http://guriddo.net/?page_id=103334)或旧的jqGrid在版本<= 4.7)中?为什么你看到包含的排序字符串不是“正确的”? jqGrid为排序提供了一些自定义的可能性,但可能性取决于fork和版本。 – Oleg

+0

目前我正在使用Guriddo jqGrid Js 5.0.0版,并且使用这种类型的数据进行排序甚至无法正常使用较少的版本。 – Ali

+0

为什么在没有任何证据的情况下重复“不能正常工作”?要定义“正确的”顺序,必须在字符串或至少一个字符上定义“比较”函数。有*许多不同的*实现。例如,有人依赖区域设置。您使用的文本包含'_'符号。是否存在一些**绝对正确的**陈述,即“_”小于(或相反大于)任何数字('0'至'9')或拉丁字符('a'至'z'或'A'直到'Z')?试着在你的字符串中使用JavaScript的[Array.sort](http://www.w3schools.com/jsref/jsref_sort.asp)函数。 – Oleg

回答

2

如果我正确理解你的问题,那么你需要在这种情况下设置自定义排序功能与语言环境字符串比较。

假设名称列具有如此复杂的字符串值,然后设置排序功能类似,

您还可以根据不同的排序要求改变这一功能

colModel:[ 
 
      ... 
 
      {name:'name',index:'name', width:100 , sorttype:'text', sortfunc: function(a,b,d){ 
 
       if(d==1) 
 
        return a.localeCompare(b); 
 
       else 
 
     \t   return b.localeCompare(a); \t 
 
       } 
 
      }, 
 
      ...

,或者如果你有多个列这样的值,然后定义单独的功能,如

colModel:[ 
 
       ... 
 
       {name:'name',index:'name', width:100 , sorttype:'text', sortfunc: sortdata}, 
 
       ... 
 
       {name:'name2',index:'name2', width:100 , sorttype:'text', sortfunc: sortdata} 
 
     ] 
 
    
 

 
function sortdata(a,b,d){ \t \t 
 
\t if(d==1) 
 
\t \t return a.localeCompare(b); 
 
\t else 
 
\t \t return b.localeCompare(a); \t \t \t 
 
\t 
 
}

+0

谢谢@amighty像冠军一样工作 – Ali

+0

不客气Mark。 – amighty

+0

@amighty这帮了我很多 –