我有一个网格,我需要在一列中显示所有数字的总和。这些数字在网格中是可编辑的,并且总和需要随着数字的变化而更新(在保存之前)。我有多个问题。相关代码如下所示,如果您想使用功能正常的程序 ,这里是一个 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 的总和对于处于初始状态的表是正确的。您可以从更新 innerHTML 的行中看到,摘要记录 ('s-1') 使用其 'amount' 字段中的正确值进行更新,我们调用 refreshCell('s-1','amount') . 但是在网格上,recid 1 的“数量”单元格被更新为显示 3000(并注意它被呈现为左对齐而不是右对齐)。为什么会这样?我应该打什么电话来更新摘要行中的“金额”单元格?
第三个问题——当用户对“金额”单元格进行更改(双击以更改金额)时,会发生 onChange 事件,这会导致计算新的总数。但是用户所做的更改在网格记录中不可用。更改保存在不同的位置。所以新计算的总数与用户在网格上看到的数字不对应。在保存更新之前,新值在记录 (records[i].amount) 中不可用。但我需要在保存更改之前访问网格中显示的金额。如何访问更改的值?