2013-03-12 61 views
0

我有一個SQL查詢,當我在MSSQL Studio中嘗試查詢時,它正在拉回結果的順序。Datatables sorting varchar

我使用Datatables.net的Datatables,除排序問題外,一切工作都很好。我在第一列的一些性質,我想訂購這些是這樣的:

1 
1a 
1b 
2 
3 
4a 
5 
etc 

但是什麼回來是這樣的:

1 
10 
100 
11 
11a 

我已經看過,雖然各個崗位,但似乎沒有工作,我相信這一定是我應該從datatables插件觸發的東西,但找不到任何東西。

有人可能會建議嗎?

回答

0

您的數據包含數字和字符,因此默認情況下它們將按字符串排序。你應該編寫你自己的插件來排序你的數據類型。看看herehere 看看如何編寫一個插件,以及如何使用它與您的表。

編輯:今天有一段時間來處理數據表的東西。如果您仍需要一個解決方案,在這裏你去:

//Sorting plug-in 
jQuery.extend(jQuery.fn.dataTableExt.oSort, { 
    //pre-processing 
    "numchar-pre": function(str){ 
     var patt = /^([0-9]+)([a-zA-Z]+)$/; //match data like 1a, 2b, 1ab, 100k etc. 
     var matches = patt.exec($.trim(str)); 
     var number = parseInt(matches[1]);  //extract the number part 
     var str = matches[2].toLowerCase(); //extract the "character" part and make it case-insensitive 
     var dec = 0; 
     for (i=0; i<str.length; i++) 
     { 
     dec += (str.charCodeAt(i)-96)*Math.pow(26, -(i+1)); //deal with the character as a base-26 number 
     } 
     return number + dec;  //combine the two parts 
    }, 

    //sort ascending 
    "numchar-asc": function(a, b){ 
     return a-b; 
    }, 

    //sort descending 
    "numchar-desc": function(a, b){ 
     return b-a; 
    } 
}); 

//Automatic type detection plug-in 
jQuery.fn.dataTableExt.aTypes.unshift(
    function(sData) 
    { 
     var patt = /^([0-9]+)([a-zA-Z]+)$/; 
     var trimmed = $.trim(sData); 
     if (patt.test(trimmed)) 
     { 
      return 'numchar'; 
     } 
     return null; 
    } 
); 

您可以使用自動型檢測功能,讓數據類型的自動檢測,或者您可以設置數據類型的列

"aoColumns": [{"sType": "numchar"}]

+0

這會很好 - datatables很棒,但現在找到了一些限制! – 2013-03-24 07:00:58

+0

@NickGreen:我已經使用與數據匹配的插件代碼更新了我的答案,並對它們進行了轉換和排序。我想知道它是否也適用於你。如果你有另一種解決方案,你可以在這裏分享嗎? – ducpn 2013-03-28 21:16:03

+0

延誤道歉。我已經放置了你的代碼,但它似乎沒有做任何事情。我需要從其他地方打電話嗎? – 2013-04-09 13:17:13