2012-02-10 19 views
2

私はdataTableのためだけの例のように最初の数だけので、私は、正しくこの値を注文することができますどのように、私のDataTable Gridでmoney値を表す列を持っている: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 
       }); 

ソリューション

私の解決策は、thisのようにそれらを隠され、number_formatせずに値を持つ新しい列を作成しました。他の方法の並べ替えを検索すると、私はiDataSort と表示されます。

答えて

0

要するに、あなたが使用することができます。

natsort($array); 
0

あなたは列が「数字」であることを指定する必要があります。

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

幸運!

+0

yeapは動作しませんが、理由はわかりませんが、列はソートを停止します。私の質問が更新されます。 –

+0

他の列はソートしますか?他のスクリプトの実行を妨げるジェネリックJSエラーが発生していませんか? – Mikhail

+0

いいえ、ファイヤーバグのアーディーテストですが、実際にはソートが発生しますが、1行だけで、他はすべて停止しています。 –

0

これ以上のコードを見ることなく、何をすべきかを正確に判断することは困難ですが、それが現在のように実行している理由は、number_formatの機能によるものと思われます。これによりstringが返され、ソートが正しく行われます。文字列に変換する前にソートを実行する必要があります。しかし、より深い説明のために、より深いコードを提供する必要があります。あなたが浮いて戻って文字列を変換する必要が

+0

まあ、私のコードを更新した、私は他のものは私がそのメーターの多くを考えるいないので、私はわずか数行を投稿します。今見てみましょう。 –

+0

と、number_formatを取り出して(私が前にテストしたように)ソート作業は完璧ですが、これは私を助けません。 –

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"

を宣言し、これがために全体のコードです数値ソート内部のDataTable:

/* 
* 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

+0

さて、今見ているように、いくつかのテストを行います。結果が –

+0

で返されます。私の編集を参照し、空のセルの大文字小文字を追加することを検討してください。 –