cccc/static/sg/examples/example-totals-via-data-provider.html
2018-12-04 09:58:47 +01:00

135 lines
3.3 KiB
HTML

<!DOCTYPE HTML>
<html>
<head>
<link rel="stylesheet" href="../css/smoothness/jquery-ui-1.8.16.custom.css" type="text/css"/>
<link rel="stylesheet" href="../slick.grid.css" type="text/css"/>
<link rel="stylesheet" href="examples.css" type="text/css"/>
<style>
.totals {
font-weight: bold;
color: gray;
font-style: italic;
}
</style>
</head>
<body>
<div style="position:relative">
<div style="width:600px;">
<div id="myGrid" style="width:100%;height:500px;"></div>
</div>
<div class="options-panel">
<h2>Demonstrates:</h2>
<ul>
<li>Implementing a data provider to create a totals row at the end of the grid.</li>
<li>This is a simplification of what the DataView does. </li>
</ul>
</div>
<h2>View Source:</h2>
<ul>
<li><A href="https://github.com/mleibman/SlickGrid/blob/gh-pages/examples/example-totals-via-data-provider.html" target="_sourcewindow"> View the source for this example on Github</a></li>
</ul>
</div>
<script src="../lib/firebugx.js"></script>
<script src="../lib/jquery-1.7.min.js"></script>
<script src="../lib/jquery-ui-1.8.16.custom.min.js"></script>
<script src="../lib/jquery.event.drag-2.2.js"></script>
<script src="../slick.core.js"></script>
<script src="../slick.editors.js"></script>
<script src="../slick.grid.js"></script>
<script>
var grid;
var data = [];
var options = {
enableCellNavigation: true,
headerRowHeight: 30,
editable: true
};
var columns = [];
for (var i = 0; i < 10; i++) {
columns.push({
id: i,
name: String.fromCharCode("A".charCodeAt(0) + i),
field: i,
width: 60,
editor: Slick.Editors.Integer
});
}
function TotalsDataProvider(data, columns) {
var totals = {};
var totalsMetadata = {
// Style the totals row differently.
cssClasses: "totals",
columns: {}
};
// Make the totals not editable.
for (var i = 0; i < columns.length; i++) {
totalsMetadata.columns[i] = { editor: null };
}
this.getLength = function() {
return data.length + 1;
};
this.getItem = function(index) {
return (index < data.length) ? data[index] : totals;
};
this.updateTotals = function() {
var columnIdx = columns.length;
while (columnIdx--) {
var columnId = columns[columnIdx].id;
var total = 0;
var i = data.length;
while (i--) {
total += (parseInt(data[i][columnId], 10) || 0);
}
totals[columnId] = "Sum: " + total;
}
};
this.getItemMetadata = function(index) {
return (index != data.length) ? null : totalsMetadata;
};
this.updateTotals();
}
$(function () {
for (var i = 0; i < 10; i++) {
var d = (data[i] = {});
d["id"] = i;
for (var j = 0; j < columns.length; j++) {
d[j] = Math.round(Math.random() * 10);
}
}
var dataProvider = new TotalsDataProvider(data, columns);
grid = new Slick.Grid("#myGrid", dataProvider, columns, options);
grid.onCellChange.subscribe(function(e, args) {
// The data has changed - recalculate the totals.
dataProvider.updateTotals();
// Rerender the totals row (last row).
grid.invalidateRow(dataProvider.getLength() - 1);
grid.render();
});
})
</script>
</body>
</html>