我们正在尝试使用HandsonTable构建类似Excel的Excel。 由于某种原因,setDataAtCell方法似乎无法正常工作。 在调试时,我看到此方法正确设置了数据,但在显示表时,未显示更新的值。我可能正在做一些非常好的事情。你的帮助是深刻的。 以下是代码:
container.handsontable({
data: getChemicalData(),
minRows: 5,
minCols: 6,
minSpareRows: 2,
minSpareCols: 0,
colHeaders: ["<b>TUBE</b>", "<b>A</b>", "<b>B</b>", "<b>C</b>", "<b>D</b>", "<b>Total in Item, grams</b>"],
colWidths: [200,50,50,50,50,100],
columns: [
{
data: "Effect",
type: {editor: Handsontable.AutocompleteEditor },
source: ["RD", "SB", "WG"],
strict: true
},
{
data: "A"
},
{
data: "B"
},
{
data: "C"
},
{
data: "D"
},
{
data: "TotalInGms",
readOnly: true
}
],
cells: function (row, col, prop)
{
var cellProperties = {};
if ((row === 0 && col === 0) || (row === 1))
{
cellProperties.readOnly = true;
}
return cellProperties;
},
onBeforeChange: function (data) {
if (data[0][1] !== "Effect") {
if (parseInt(data[0][3]) > 0) {
}
else {
return false;
}
}
},
onChange: function (data, source) {
if (source === 'loadData') {
return; //don't show this change in console
}
if (isBypass === true) {
return;
}
var sel = $("#example").handsontable('getSelected');
if (sel != null) {
if (sel[0] === 0) {
var noOfRows = $("#example").handsontable('countRows');
var totalGmsPerItem = 0;
var gmsPerTube = 0;
for (var i = 2; i < noOfRows; i++) {
gmsPerTube = parseInt($("#example").handsontable('getDataAtCell', i, sel[1]));
if (gmsPerTube > 0) {
totalGmsPerItem = parseInt(totalGmsPerItem) + gmsPerTube * parseInt(data[0][3]);
}
}
var noOfCols = $("#example").handsontable('countCols');
isBypass = true;
$("#example").handsontable('setDataAtCell', 3, 2, totalGmsPerItem);
//$("#example").handsontable('setDataAtCell', sel[0],sel[1], 19);
isBypass = false;
}
}
return;
}
});
答案 0 :(得分:0)
来自wiki:
handsontable('setDataAtCell', row, col, value)
为单元格设置新值。要一次更改多个单元格,请将格式为
[[row, col, value], ...]
的更改数组作为唯一参数。 Col是可见列的索引(请注意,如果重新排序列,将使用当前顺序)
如果没有方法setDataAtRowProp和setDataAtCell接受该方法的参数,你必须像我一样下载了一个破碎的版本。