【问题标题】:Datatables render body and footer column as numeric数据表将正文和页脚列呈现为数字
【发布时间】:2017-12-04 19:39:09
【问题描述】:

我正在尝试格式化正文和页脚部分的单列中的数字数据。格式如下:

  • 千位分组分隔符:“.”
  • 小数点指示符:","
  • 要显示的小数位数:“0”
  • 前缀:“$”

这是我的尝试:

    $('#idtablainforme_ventaporfamilia').DataTable({
        destroy: true,
        "searching": false, "paging": false, "ordering": false, "info": false, "autowidth": false,
        columns: [
           { data: "1", render: $.fn.dataTable.render.text() },
           { data: "2", render: $.fn.dataTable.render.number('.', ',', 0, '$') }
        ],
        dom: 'Bfrtip',
        buttons: [
            {
                extend: 'excel',
                footer: true,
                title: 'INFORME DE VENTAS POR FAMILIA',
                text: '<i class="fa fa-file-excel-o"></i>',
                titleAttr: 'Exporta a EXCEL',
            }
        ]
    });

这是数据:

CHEQUERA MUJER 5231760 
CARTERA 3487630 
BILLETERA MUJER 2155120 
NECESER 21980 
COSMETIQUERA 10990 
SET DE VIAJE 10990
TOTAL 12925150

但它会呈现下表:

<table id="idtablainforme_ventaporfamilia" class="table table-striped table-striped table-bordered nowrap dataTable">
    <thead>
        <tr role="row">
            <th>
                FAMILIA
            </th>
            <th>
                VENTA
            </th>
        </tr>
    </thead>
    <tfoot>
        <tr>
            <th>
                TOTAL
            </th>
            <th style="text-align: right">
                12.925.150
            </th>
        </tr>
    </tfoot>
    <tbody>
        <tr>
            <td>CHEQUERA MUJER</td>
            <td>$5</td>
        </tr>
        <tr>
            <td>CARTERA</td>
            <td>$5</td>
        </tr>
        <tr>
            <td>BILLETERA MUJER</td>
            <td>$2</td>
        </tr>
        <tr>
            <td>NECESER</td>
            <td>$21</td>
        </tr>
        <tr>
            <td>COSMETIQUERA</td>
            <td>$10</td>
        </tr>
        <tr>
            <td>SET DE VIAJE</td>
            <td>$10</td>
        </tr>
    </tbody>
</table>

问题在于正文部分的格式错误($5 而不是 $5.231.760)并且它没有格式化页脚部分。

【问题讨论】:

  • 页脚部分的格式应该在哪里......?没有代码。但我真的无法复制错误的渲染,尝试了所有版本 .9-.16,这里有一个 .11 示例 -> jsfiddle.net/0f9Ljfjr/1005
  • @davidkonrad “TOTAL”值应该放在页脚部分,我不知道如何格式化它

标签: datatables


【解决方案1】:

查看14489 周围的源代码(确切的行号将来可能会更改)。渲染器实际上是表单上的对象字面量:

render = {
  number: function(..) {
    return {
      display: function(..) {
      }
    }
  }
  ...
} 

因此您可以使用

以编程方式调用渲染器
$.fn.dataTable.render.number('.', ',', 0, '$').display(value)

现在您可以使用footerCallback 来使用render.number().display() 呈现其值

footerCallback: function(tfoot, data, start, end, display) {
  var $th = $(tfoot).find('th').eq(1);
  $th.text( $.fn.dataTable.render.number('.', ',', 0, '$').display( $th.text() )) 
},

注意,值必须是一个未格式化的数字,即12925150而不是12.925.150 - 否则会失败

http://jsfiddle.net/wotyo6nL/

【讨论】:

  • 如果我想把页脚加粗,或者增加页脚字母的大小,不留千位格式怎么办?
  • @Danilo,在这种情况下你可以使用 CSS table.dataTable tfoot th:nth-child(2) { -> jsfiddle.net/wotyo6nL/1
  • 是的,但是在导出时?他会用样式来做吗?
  • @Danilo,无论如何默认都不会导出样式;逻辑上不使用 CSV / Excel,使用 PDF 您必须自己自定义导出,但这是可能的。我不知道打印,从未尝试过。
猜你喜欢
  • 2023-01-20
  • 1970-01-01
  • 2015-05-02
  • 1970-01-01
  • 1970-01-01
  • 2012-11-06
  • 1970-01-01
  • 1970-01-01
  • 2020-11-17
相关资源
最近更新 更多