您如何更新W2UI网格摘要单元格



我有一个网格,我需要在一个列中显示所有数字的总和。这些数字在网格中可编辑,随着数字更改(保存之前),需要更新总和。我有多个问题。相关代码如下所示,如果您想使用功能性程序戳戳,这是JSFIDDLE。

$(function() {
    $('#grid').w2grid({
        name: 'grid',
        columns: [{
            field: 'recid', caption: 'ID', size: '50px', sortable: true, attr: 'align=center'}, {
            field: 'lname', caption: 'Last Name', size: '150px', sortable: true }, 
            {field: 'amount', caption: 'Amount', size: '100px', render: 'money', editable: { type: 'money' }}, 
        ], 
        records: [{
            recid: 1, fname: 'Jane',  amount: 1000.00}, {
            recid: 2, fname: 'Stuart', amount: 1000.00}, {
            recid: 3, fname: 'Jin', amount: 1000.00}, {
            recid: 's-1', fname: '', amount: 0, w2ui: {summary: true}}
        ]
    });
    w2ui.grid.on('change', function(event) {
        event.done(function () {updateTotal(); });
    });    
    w2ui.grid.on('refresh', function(event) { updateTotal(); });
    w2ui.grid.on('render', function(event) {updateTotal(); });
});
function updateTotal() {
    var total = 0.0;
    for (var i = 0; i < w2ui.grid.records.length; i++) {
        if (typeof w2ui.grid.records[i].amount == "number") {
            total += w2ui.grid.records[i].amount;
        }
    }
    w2ui.grid.get('s-1').amount = total;
    w2ui.grid.refreshCell('s-1','amount');
    document.getElementById("gridtotal").innerHTML = '' + w2ui.grid.summary[0].amount  + '<br>w2ui.grid.records[0].amount = ' + w2ui.grid.records[0].amount;
}

第一期 - 摘要行的更新未显示。我有Onchange,Onrefresh和Onrender处理程序。他们包装了对UpdateTotal()的调用,该电话在每个记录中添加了"金额",并将结果存储在摘要记录的数量字段中。金额更改后,我致电Refreshcell。但是,当网格的初始显示发生时,没有一个处理程序被调用 - 因此摘要记录显示0。当最初显示电网时,应提出什么来更新摘要金额?

第二期 - UpdateTotal()显示错误的单元格。单击按钮执行UpdateTotal()。3000的总和对于其初始状态的表是正确的。您可以从更新InterHTML的行中看到摘要记录('s-1')在其"金额"字段中更新的,并且我们称为RefReshCell('s-1,'nocal')。但是在网格上,recid 1的"金额"单元格被更新以显示3000(并注意它被渲染为左侧的,而不是右键)。为什么发生这种情况?我应该拨打什么来更新摘要行中的"金额"单元格?

第三期 - 当用户更改"量"单元格(双击更改金额的双击)时,发生了汇总事件,这会导致新的总数进行计算。但是用户所做的更改在网格记录中没有可用。更改保存在不同的位置。因此,新计算的总数与用户在网格上看到的数字不符。新值在记录(记录[i] .Amount)中不可用,直到保存更新后。但是我需要在保存更改之前访问网格中显示的金额。我如何访问更改的值?

要修改现有记录,您需要使用set方法 - 使用get您进行 not 获取参考,而是复制!

 w2ui.grid.set('s-1', {amount: total});

关于您的第一个问题:您正在分配网格已经渲染之后。您需要在构造函数中分配回调:

  $('#grid').w2grid({
      onRender: ....
  });

当您使用set而不是GET时,您的第二个问题不再是问题。

关于您的第三个问题:在保存更改之前,更改将存储在record.w2ui.changes中 - 因此,请致电grid.save()或从更改中获取金额,而不是从原始记录中获取。

更新的小提琴:

http://jsfiddle.net/pfq20gnu/14/

最新更新