【问题标题】:Update table after data in one column is updated(recalculated)更新一列数据后更新表(重新计算)
【发布时间】:2012-10-01 07:50:07
【问题描述】:

我正在构建一个带有启用 DataTable 的表的简单页面。

来自我服务器的数据如下所示:

[{"name": "John","salary": 2000,"bonus1": 100,"bonus2": 100},
 {"name": "Jack","salary": 2500,"bonus1":   0,"bonus2": 200},
 {"name": "Bill","salary": 2000,"bonus1": 300,"bonus2": 300}
]

我需要添加并计算第五列,它代表员工工资的百分比值(工资/所有工资的总和)

fnPreDrawCallback 中,我可以修改oSettings.aoData,所以当我修改console.log(oSettings.aoData) 时,我得到了正确的值,但表中的该列为空。

我的fnPreDrawCallback 函数如下所示:

"fnPreDrawCallback": function (oSettings) {
          iTotal = [0, 0, 0]; //declared in $(document).ready
          var dataLength=oSettings.aoData.length;
            for (var i = 0; i < dataLength; i++) {
                iTotal[0] += oSettings.aoData[i]._aData.salary;
                iTotal[1] += oSettings.aoData[i]._aData.bonus1;
                iTotal[2] += oSettings.aoData[i]._aData.bonus2;
            }

          for (i = 0; i < dataLength; i++) {
                oSettings.aoData[i]._aData.percent=(oSettings.aoData[i]._aData.salary / iTotal[0] * 100).toFixed(2)+'%';

            }
          console.log(oSettings.aoData);
        },

这是我的代码:http://live.datatables.net/umezez/13/edit

我的问题:我应该在哪里更新我的数据,以便更新在表格中可见?

我希望避免使用选择器和更新 DOM 的内容,因为我希望能够使用 TableTools 或服务器端处理导出我的表格。

【问题讨论】:

    标签: javascript datatables


    【解决方案1】:

    我不明白你为什么不简单地做这两件事,更新aoData(以便您可以导出)并自己更新html(以便正确显示)

    我知道这是一个 hack,但它应该可以工作 :)

    http://live.datatables.net/umezez/16/edit

    使用 fnUpdate() 编辑

    http://live.datatables.net/umezez/23/edit

    【讨论】:

    • 我从我以前的问题和你的回答中知道了那个 hack :) Allan 在数据表论坛上写信给我说我应该使用 fnUpdate,但我不知道如何在我的情况下使用它,在哪个事件我应该更新 aoData 以查看我在表中的更改。我知道这是一遍又一遍地问同样的问题,但在实际报告中,我将有大约 30 列和 100 多行。您的解决方案是目前最好的,但如果可以选择只修改 aoData 并查看更新,那就太棒了:)
    • @Misiu 好的,我会使用 fnUpdate 研究解决方案
    • @Misiu 我及时抓住了我希望的赏金,这是解决方案,您在点击处理程序live.datatables.net/umezez/23/edit使用 fnUpdate()@
    • 再次嗨 :) 这几乎是完美的 :) 因为当我单击显示/隐藏按钮时百分比列会更新。但我认为fnUpdate 到第二次点击处理程序不会有问题。这样在我移动行后更新将可见。希望这足够清楚:) 除了一切都很好:)
    • 我做了一点修改:live.datatables.net/umezez/24/edit 我知道这可以优化,但现在效果更好。再次感谢,你拯救了我的一天!
    【解决方案2】:

    【讨论】:

    • fnFooterCallbackfnPreDrawCallback 之后被触发。你没有理解我的问题。我知道如何添加摘要,我需要更新列。我可以修改aoData,没问题,我需要知道更新后如何显示。
    【解决方案3】:

    这就是答案

    http://live.datatables.net/umezez/19

    基本上你需要先计算工资总额(我将你的数据移动到一个变量并在表格呈现之前计算总数) 然后你需要在 % 列上使用 fnRender 函数来计算和显示你的百分比(下面是 % 的列定义)

     {
                "sTitle": "%",
                "bVisible": true,
                "sType": "string",
                "sWidth": "50px",
                "sClass": "center percent",
                "mData": "percent",
              "fnRender": function(o) {return o.aData.salary/totalSalaries}
            }
    

    【讨论】:

    • fnRender 已弃用。第二件事:在开始时将计算移到表外有帮助,但尝试将第二个表中的行添加到第一个表中。添加了您的修改后,百分比列未刷新。感谢您试一试:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-24
    • 1970-01-01
    • 1970-01-01
    • 2021-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多