Одним из обходных путей было бы как-то управлять собственной сводкой столбцов, поскольку Handsontable мог бы дать вам некоторую головную боль.Таким образом, вы можете попытаться добавить еще одну строку, чтобы вставить вашу арифметику , но она беспорядочная (требуется фиксированное число строк и не работает с операциями фильтрации и сортировки. Тем не менее, она может хорошо работать при некоторых обстоятельствах)..
Однако, по моему скромному мнению, столбец сводки должен быть полностью функциональным. Затем нам нужно вывести итоговую строку из данных таблицы. Что приходит на ум, это взять упомянутую выше дополнительную строку и взятьэто далеко от области данных таблицы, но это заставило бы нас сделать так, чтобы из строки таблицы всегда выглядело так, как будто оно все еще было в таблице.
Так что я подумал, что вместоимея новую строку, мы могли бы просто добавить нашу сводку столбца в заголовок столбца:
Вот рабочий пример JSFiddle .
После рендеринга таблицы Handsontable нам нужно перебрать столбцы и настроить сводку столбцов прямо в HTML-содержимом ячейки таблицы:
for(var i=0;i<tableConfig.columns.length;i++) {
var columnHeader = document.querySelectorAll('.ht_clone_top th')[i];
if(columnHeader) { // Just to be sure column header exists
var summaryColumnHeader = document.createElement('div');
summaryColumnHeader.className = 'custom-column-summary';
columnHeader.appendChild( summaryColumnHeader );
}
}
Теперь, когда наше местодержатели установлены, мы должны обновить их с некоторыми арифметическими результатами:
var printedData = hotInstance.getData();
for(var i=0;i<tableConfig.columns.length;i++) {
var summaryColumnHeader = document.querySelectorAll('.ht_clone_top th')[i].querySelector('.custom-column-summary'); // Get back our column summary for each column
if(summaryColumnHeader) {
var res = 0;
printedData.forEach(function(row) { res += row[i] }); // Count all data that are stored under that column
summaryColumnHeader.innerText = '= '+ res;
}
}
Эта функция кода может вызываться в любое время, когда она должна быть:
var hotInstance = new Handsontable(/* ... */);
setMySummaryHeaderCalc(); // When Handsontable table is printed
Handsontable.hooks.add('afterFilter', function(conditionsStack) { // When Handsontable table is filtered
setMySummaryHeaderCalc();
}, hotInstance);
Не стесняйтесь комментировать,Я мог бы улучшить свой ответ.