2012-02-10 69 views
2

我有一列代表我的DataTable Grid貨幣價值,我怎麼能正確地訂購此值,因爲dataTable的秩序只能由第一個數字像例如:數據表按編號字段順序

9.000,00

8.000,00

5.454.043,00

4.454.043,00

當然噸帽子它應該是這個樣子:

5.454.043,00

4.454.043,00

9.000,00

8.000,00

我使用number_format設置我的金錢格式。

PHP:

<td>".number_format($money,2,',','.')."</td>

任何問題,是我的客人。

謝謝。


編輯:

由@Mikhail答案,試試這個,但在3位置列排序不要了。

... 
"aoColumnDefs": [ 
    { "sType": "numeric", "aTargets": [ 3 ] } 
], 
... 

編輯2

更多一點代碼:

PHP:

while(!$res->EOF){ 
    ... // post only the 3 <td> position 
    <td style='text-align: right;'>".number_format($value,2,',','.')."</td> 
    ... 
    $res->MoveNext(); 
} 

JS的DataTable

var oTable = $('#example').dataTable({ 
        "bJQueryUI": true, 
        "sScrollY": "225px", 
        "sScrollX": "100%", 
        "sScrollXInner": "100%", 
        "bDestroy" : true, 
        "bScrollCollapse": true, 
        "aoColumnDefs": [ 
         { "sType": "numeric", "aTargets": [ 3 ] } 
        ], 
        "sDom": '<"H"Tfr>t<"F"ip>', 
        "oTableTools": { 
         "sSwfPath": "js/DataTables/extras/TableTools/media/swf/copy_cvs_xls_pdf.swf", 
         "sRowSelect": "single", 
         "aButtons": [ 
             { 
              "sExtends": "xls", 
              "sButtonText": "Excel" 
             }, 
             { 
              "sExtends": "print", 
              "sButtonText": "Print" 
             } 
            ] 
        }, 
        "aaSorting": [[ 0, "asc" ]], 
        "bPaginate": false 
       }); 

解決方案

我的解決辦法是沒有number_format創建具有價值的新列,隱藏他們像this。尋找其他的排序方式,我發現iDataSort 現在我可以在我的顯示列中格式化任何東西。

回答

0

總之,你可以使用:

natsort($array); 
0

你需要指定的列是「數字」。

http://datatables.net/usage/columns#sType

祝你好運!

+0

yeap,但不工作,不知道爲什麼,但列停止排序。將更新我的問題。 – 2012-02-10 16:48:56

+0

做其他列排序?你確定你沒有一個通用的JS錯誤來阻止其他腳本執行嗎? – Mikhail 2012-02-10 17:02:25

+0

不,在螢火蟲中進行測試,實際上發生了這種情況,但只有1行,所有其他的都停止。 – 2012-02-10 17:06:09

0

沒有看到任何更多的代碼,很難確切地確定要做什麼,但其目前正在執行的原因似乎是由於number_format函數。這會返回一個string,因此排序是正確的。在轉換爲字符串之前,您需要執行排序。但是爲了更深入的解釋,您需要提供更深入的代碼。

+0

好吧,我更新了我的代碼,我只發佈了幾行,因爲其他的東西我不認爲metter的很多。現在看看。 – 2012-02-10 17:00:53

+0

,並取出number_format,(如我以前測試)排序工作的完美,但這不會幫助我。 – 2012-02-10 17:03:13

2

您需要將字符串轉換回浮動,你可以定義自己的數據類型爲(未經測試):

(function(){ 

    var tofloat = function(n) { 
     return parseFloat(n.replace('.', '').replace(',', '.')); 
    }; 

    $.fn.dataTableExt.oSort['mynumeric-asc'] = function(a, b) { 
     a = tofloat(a); 
     b = tofloat(b) 

     return ((a < b) ? -1 : ((a > b) ? 1 : 0)); 
    }; 

    $.fn.dataTableExt.oSort['mynumeric-desc'] = function(a, b) { 
     a = tofloat(a); 
     b = tofloat(b) 

     return ((a < b) ? 1 : ((a > b) ? -1 : 0)); 
    }; 

}()); 

然後聲明"sType": "mynumeric"

比較,這是整個代碼數值排序裏面的數據表:

/* 
* numerical sorting 
*/ 
"numeric-asc": function (a, b) 
{ 
    var x = (a=="-" || a==="") ? 0 : a*1; 
    var y = (b=="-" || b==="") ? 0 : b*1; 
    return x - y; 
}, 

"numeric-desc": function (a, b) 
{ 
    var x = (a=="-" || a==="") ? 0 : a*1; 
    var y = (b=="-" || b==="") ? 0 : b*1; 
    return y - x; 
} 

正如你看到的,轉換爲數目由1串,不知道做乘以關於逗號或關於作爲除小數點分隔符之外的任何東西的點。

+0

所以逗號是罪魁禍首?我認爲「數字」可以處理。我會用逗號代替一段時間。 – Mikhail 2012-02-10 17:07:36

+0

好吧,看起來像現在的工作,會做一些測試的。返回結果 – 2012-02-10 17:12:37

+0

是的,看看我的編輯,並考慮添加空單元格的情況。 – 2012-02-10 17:15:01