Как смоделировать электронную таблицу
Я работаю с сеткой Sigma, заполняя ее из PHP. Предполагается, что Sigma имеет функцию обработки формул, но, похоже, она работает только с загруженными наборами данных JS. Поэтому мне было интересно, можно ли изменить некоторые ячейки после загрузки страницы, есть ли в них формулы, подобные электронным таблицам?
Это код, созданный Sigma (одна строка):
19
2012-02-11
Bob
LB
128
0
0
0
Таким образом, эффект, который я хочу получить, состоит в том, чтобы взять последнюю ячейку и добавить предыдущие 3 значения ячейки (внутри td и div каждого).
Идеи?
2 ответа
Добавьте следующее в gridoption
onCellClick: function(value, record , cell, row, colNo, rowNo,columnObj,grid){
overRowNo=rowNo;
overColNo=colNo;
cellValue=value;
},
afterEdit: function( value, oldValue, record, col, grid){
// ordered trays calculation
if(overColNo == 5 || overColNo == 6){
var text = $(this.activeCell).find('div.gt-inner').text();console.log(text);
if (!$.isNumeric(text)){ //jquery's isnumeric function
alert ('Please enter a valid number.');
// because cell 5 is a drop down select we don't need to scan for bad input; this is only for cell 6 - ordered cells
text = 0;
}
var traycode = mygrid.getColumnValue(5,overRowNo);
var ordcells = mygrid.getColumnValue(6,overRowNo);
if (parseInt(traycode) >0) {
tray = parseInt(traycode);
} else {
tray=text;
}
if (parseInt(ordcells) >0) {
ordcell = parseInt(ordcells);
} else {
ordcell= $('input.gt-editor-text').first().val();
}
//alert(tray+' '+ordcell);
if (tray > 0 && ordcell > 0) var ordtrays = Math.ceil(ordcell/tray);
if (ordtrays > 0){
mygrid.setColumnValue('ordered_trays',overRowNo,ordtrays);
mygrid.updateEditState();
mygrid.activeRecord.ordered_trays = ordtrays;
mygrid.refresh();
}
}
Разобрались. Этот код будет только приблизительно применяться к кому-либо еще, использующему сетку Sigma.
Загрузите это как отдельный файл JS в заголовке. Это будет инициировать пересчет
каждый раз, когда ячейка изменяется, тем самым предлагая возможность иметь программируемые формулы.
//now load the values from the retrieved table, after a change initiated by user
$(window).change(function() {
//all formulae go below here:
// Ordered trays formula
$('table.gt-table tbody tr').each(function() {
var tray = 0;
var ordcell = 0;
var traycode= $(this).find("td.gt-col-mygrid1-trays_code div").html();
var ordcells= $(this).find("td.gt-col-mygrid1-ordered_cells div").html();
if (parseInt(traycode) >0) {
tray = parseInt(traycode);
} else {
tray = 0;
}
if (parseInt(ordcells) >0) {
ordcell = parseInt(ordcells);
} else {
ordcell = 0;
}
if (tray > 0 && ordcell > 0) var ordtrays = ordcell/tray;
if (ordtrays > 0){
$(this).find("td.gt-col-mygrid1-ordered_trays div").html(ordtrays);
}
});
// end Ordered trays formula
}); // end the window change function