<!DOCTYPE html>
<html lang="en">
<head>
<script> var __basePath = ''; </script>
<style> html, body { margin: 0; padding: 0; height: 100%; } </style>
<script src="https://unpkg.com/ag-grid-enterprise@17.1.1/dist/ag-grid-enterprise.min.js"></script></head>
<body>
<div style="height: 100%; padding-top: 35px; box-sizing: border-box;">
<div id="myGrid" class="ag-theme-balham" style="height: 100%"></div>
</div>
<div style="position: absolute; top: 0px; left: 0px;">
<button onclick="startEditingInMasterRow()">Edit Master</button>
<button onclick="stopEditingInMasterRows()">Stop Edit Master</button>
<button onclick="startEditingInDetailRow()">Edit Detail</button>
<button onclick="stopEditingInDetailRows()">Stop Edit Detail</button>
</div>
<script src="main.js"></script>
</body>
</html>
var columnDefs = [
// group cell renderer needed for expand / collapse icons
{field: 'name', cellRenderer:'agGroupCellRenderer', cellRendererParams: {
checkbox: true
}},
{field: 'account'},
{field: 'calls'},
{field: 'minutes', valueFormatter: "x.toLocaleString() + 'm'"}
];
var gridOptions = {
rowSelection: 'multiple',
groupSelectsChildren: true,
suppressRowClickSelection: true,
rowMultiSelectWithClick: true,
onRowSelected: this.kmlRowSelected,
suppressCellSelection: true,
columnDefs: columnDefs,
enableColResize: true,
masterDetail: true,
detailCellRendererParams: {
detailGridOptions: {
rowSelection: 'multiple',
groupSelectsChildren: true,
suppressRowClickSelection: true,
rowMultiSelectWithClick: true,
onRowSelected: this.kmlRowSelected,
suppressCellSelection: true,
columnDefs: columnDefs,
enableColResize: true,
columnDefs: [
{field: 'callId', checkboxSelection: true },
{field: 'direction'},
{field: 'number'},
{field: 'duration', valueFormatter: "x.toLocaleString() + 's'"},
{field: 'switchCode'}
],
enableColResize: true,
defaultColDef: {
editable: true
},
onGridReady: function(params) {
params.api.sizeColumnsToFit();
}
},
getDetailRowData: function(params) {
params.successCallback(params.data.callRecords);
}
},
detailRowHeight: 340,
defaultColDef: {
editable: true
},
onGridReady: function (params) {
params.api.sizeColumnsToFit();
// arbitrarily expand a row for presentational purposes
setTimeout(function() {
var rowCount = 0;
params.api.forEachNode(function (node) {
node.setExpanded(rowCount++ === 1);
});
}, 500);
}
};
function startEditingInMasterRow() {
// stop editing in detail grid
gridOptions.api.forEachDetailGridInfo(function(detailGridApi) {
detailGridApi.api.stopEditing();
});
// start editing in master grid
gridOptions.api.startEditingCell({rowIndex: 0, colKey: 'calls'});
}
function stopEditingInMasterRows() {
gridOptions.api.stopEditing();
}
function startEditingInDetailRow() {
// stop editing in master grid
gridOptions.api.stopEditing();
// start editing in detail grid
var detailGrid = gridOptions.api.getDetailGridInfo("detail_1");
detailGrid.api.startEditingCell({rowIndex: 0, colKey: 'number'});
}
function stopEditingInDetailRows() {
gridOptions.api.forEachDetailGridInfo(function(detailGridApi) {
detailGridApi.api.stopEditing();
});
}
// setup the grid after the page has finished loading
document.addEventListener('DOMContentLoaded', function() {
var gridDiv = document.querySelector('#myGrid');
new agGrid.Grid(gridDiv, gridOptions);
agGrid.simpleHttpRequest({url: 'https://raw.githubusercontent.com/ag-grid/ag-grid-docs/latest/src/javascript-grid-master-detail/cell-editing/data/data.json'}).then(function(data) {
gridOptions.api.setRowData(data);
});
});