2015-10-19 14 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這幫了我很多 –