DataTables footerCallback - 以另一个列值为条件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DataTables footerCallback - 以另一个列值为条件相关的知识,希望对你有一定的参考价值。

我正在尝试在DataTables中实现一个footerCallback,它根据同一行中不同列中的单元格对某些列进行条件求和。任何人都可以帮助我吗?我使用下面的代码并检查alert(cur_index);但我认为它没有按预期工作。而且我没有得到一列正确的值。我的代码是:

pageTotal6 = api
            .column( 6, { page: 'current'} )
            .data()
            .reduce( function (a, b) {
                var cur_index = api.column(6).data().indexOf(b);
                alert(cur_index);
                alert(api.column(3).data()[cur_index]);
                if (api.column(3).data()[cur_index] != "Pending review") {
                    return parseInt(a) + parseInt(b);
                }
                else { return parseInt(a); }
                    return intVal(a) + intVal(b);
            }, 0 );

在第3列中我有一些重复值,我只想求第3列的不同值。我怎么能用datatable和html做这件事

答案

有两种方法可以解决这个问题。

第一种方法 (我假设您正在使用C#中的Database [ViewModel]读取JSON数据,并使用服务器端处理)

使用下面的图像作为我如何解决问题的参考

enter image description here

我想总结一下“Amount”列,其中“Measure Type”(最后一列)!= 99.我用ViewModel做的第一件事是将列表传递给我的JSON对象是添加一个没有读取的列和列表中的任何MeasureType = 99行。

所以基本上我的JSON对象有两列读取Amount列数据,一个是可见的,你在图像中看到有所有数字,另一个看不见,只读取我想在页脚中求和的值。

while (MyDataReader.Read())
{
   //get all other columns
   //column with amount figures measuretype != 99
   if (reportData.q_measuretype != 99)
   {
      reportData.amountNo99 = Convert.ToDecimal(String.Format("{0:0.00}", read["q_amount"]));
   }
   else
   {
      reportData.amountNo99 = 0;
   }

   list.Add(reportData);

}

在该步骤之后,然后在footerCallback函数中,您可以通过仅对不可见列求和来保持简单,因为当您将行列表放到页面上时已经设置了条件

totalNettNo99 = api
   .column(8, { page: 'current' }) //remember this is the last invisible column
   .data()
   .reduce(function (a, b) {
        return intVal(a) + intVal(b);
   }); 

然后,您可以使用可见列3(索引2)上的总和更新页脚

$(api.column(2).footer()).html(
     '€' + totalNettNo99.toFixed(2)
);

记得在“columnDefs”中以这种方式设置不可见列

"ajax": {
                "url": "/Reports/loadTransactionList",
                "type": "POST",
                "datatype": "JSON"

            },

            "columnDefs": [

                {
                    "targets": [8],
                    "visible": false,
                    "searchable": false,
                    "render": false
                }
            ],

            "columns": [
                {
                    "data": "convertDateToString"
                },
                {
                    "data": "convertTimeToString"
                },
                {
                    "data": "q_receiptnumber"
                },

从图像中可以看出,只有具有吉尼斯品脱的行总和页脚上的总和。它有点打字,但如果你用脚本解决方案撕裂你的头发,解决了问题。

第二种方法 你可以在这里看看这个答案纯粹是用脚本编写的,而不是输入我的解决方案

https://stackoverflow.com/a/42215009/7610106

归功于nkbved

以上是关于DataTables footerCallback - 以另一个列值为条件的主要内容,如果未能解决你的问题,请参考以下文章

DataTables:页脚不会根据搜索更新

使用 sum api 计算总和

如何对数据表中特定数据列的值求和

找不到文件'dataTables/jquery.dataTables' Rails 4

表格插件之一datatables

Datatables 完整的datatables案例