数据表按编号字段顺序

问题描述:

我有一列代表我的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 现在我可以在我的显示列中格式化任何东西。

总之,你可以使用:

natsort($array); 

你需要指定的列是“数字”。

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

没有看到任何更多的代码,很难确切地确定要做什么,但其目前正在执行的原因似乎是由于number_format函数。这会返回一个string,因此排序是正确的。在转换为字符串之前,您需要执行排序。但是为了更深入的解释,您需要提供更深入的代码。

+0

好吧,我更新了我的代码,我只发布了几行,因为其他的东西我不认为metter的很多。现在看看。 – 2012-02-10 17:00:53

+0

,并取出number_format,(如我以前测试)排序工作的完美,但这不会帮助我。 – 2012-02-10 17:03:13

您需要将字符串转换回浮动,你可以定义自己的数据类型为(未经测试):

(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