在更改后更改单元格值,使用或不使用 setDataAtCell/getDataAtCell handontable

问题描述 投票:0回答:1

我尝试更新已手动编辑的单元格旁边的单元格的值。例如,在进行计算时,我需要更改单元格 A2 的值。

案例步骤: - A1 的值被编辑。 - 计算是在 afterChange 事件中用 javascript 完成的。 - 现在用计算出的值更新 A2 中的值。

在我的例子中 getDataAtCellsetDataAtCell 方法不起作用。 我收到以下错误。

无法读取未定义的属性“getDataAtCell”

无法读取未定义的属性“setDataAtCell”

请建议如何获取和设置这些值。无论使用 getDataAtCell/setDataAtCell 方法还是不使用这些方法。

这是代码:

afterChange: function(changes, source) {
changes.forEach(function(change) {
var row = change[0];
var col = change[1];
var oldVal = change[2];
var newVal = change[3];
alert(row + "\n" + col + "\n" + oldVal + "\n" + newVal);
 /*get value at cell 1,1*/
      alert(hot.getDataAtCell(1,1));
      hot.setDataAtCell(row, col+1, 'Some new value');
      })
javascript handsontable
1个回答
0
投票

如果您想让别人找出您收到此错误的原因,您别无选择,只能将 HandsOnTable 的整个定义放在其中。您在问题中提供的内容还不够。

但是,我能做的是给你一个工作示例

   getDataAtCell(row,col);

至少找出你在表定义中做错了什么。

请注意,我没有直接在 afterChange 事件中包含 setDataAtCell,因为它会创建无限循环。

在此示例中,如果您尝试在表中进行计算,但尝试修改第一列的值,我会通过停止更改来防止无限循环,您将看到我在说什么。


我对进行此类计算的建议是使用您的初始数据(myData)或副本(取决于您的需要)来进行计算并再次加载数据。

假设当您使用新值修改单元格 [row,col] 时,它也会通过添加您刚刚在 [row,col] 中输入的值来修改右侧的单元格 [row,col+1] [row,col+1] 的当前值:

afterChange: function(changes, source) { if(!changes) { return; } $.each(changes, function(index, element) { var row = element[0]; var col = element[1]; var oldVal = element[2]; var newVal = element[3]; if(col+1<hot.countCols()) { myData[row][col+1]=parseInt(myData[row][col+1])+parseInt(newVal); hot.loadData(myData); } }); }

请参阅

此处的完整示例。 您可以注意到,再次加载表格不会像上面那样触发 afterChange 事件,因此,不会一遍又一遍地进行计算,因为 afterChange 每次都会触发。

© www.soinside.com 2019 - 2024. All rights reserved.