.example-wrapper {
display: grid;
grid-template-rows: auto 1fr;
height: 100%;
width: 100%;
}
button {
height: unset !important;
}
.example-button-row {
display: inline;
gap: 5px;
padding-right: 8px;
}
.example-buttons {
padding-bottom: 8px;
}
.grid-wrapper {
flex: 1 1 0px;
}
#myGrid {
height: 100%;
width: 100%;
}
let gridApi;
const gridOptions = {
columnDefs: [
{ field: "athlete", minWidth: 120 },
{ field: "age", aggFunc: "avg" },
{ field: "country" },
{ field: "date" },
{ field: "sport", minWidth: 120 },
{ field: "gold" },
{ field: "silver" },
{ field: "bronze", minWidth: 100 },
{ field: "total", aggFunc: "sum" },
],
defaultColDef: {
flex: 1,
editable: true,
},
grandTotalRow: "bottom",
onRowEditingStarted: (_event) => {
console.log("rowEditingStarted");
},
onRowEditingStopped: (_event) => {
console.log("rowEditingStopped");
},
onCellEditingStarted: (_event) => {
console.log("cellEditingStarted");
},
onCellEditingStopped: (_event) => {
console.log("cellEditingStopped");
},
onCellValueChanged: (_event) => {
console.log("Cell value changed");
},
};
function getEditingCells() {
const cells = gridApi.getEditingCells();
console.log("Editing cells:", cells);
}
function startBatchEdit() {
console.log("Starting batch edit");
gridApi.startBatchEdit();
}
function commitBatchEdit() {
console.log("Committing batch edit");
gridApi.commitBatchEdit();
}
function cancelBatchEdit() {
console.log("Cancelling batch edit");
gridApi.cancelBatchEdit();
}
function startEdit() {
gridApi.startEditingCell({
rowIndex: 0,
colKey: "athlete",
});
}
function cancelEdit() {
gridApi.stopEditing(true);
}
function stopEdit() {
gridApi.stopEditing();
}
// setup the grid after the page has finished loading
document.addEventListener("DOMContentLoaded", function () {
const gridDiv = document.querySelector("#myGrid");
gridApi = agGrid.createGrid(gridDiv, gridOptions);
fetch("https://www.ag-grid.com/example-assets/small-olympic-winners.json")
.then((response) => response.json())
.then((data) => gridApi.setGridOption("rowData", data));
});
<!doctype html>
<html lang="en">
<head>
<title>JavaScript Example - Cell Editing Batch - Batch Editing Api</title>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="robots" content="noindex" />
<link
href="https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@400;500;700&display=swap"
rel="stylesheet"
/>
<style media="only screen">
:root,
body {
height: 100%;
width: 100%;
margin: 0;
box-sizing: border-box;
-webkit-overflow-scrolling: touch;
}
html {
position: absolute;
top: 0;
left: 0;
padding: 0;
overflow: auto;
font-family: -apple-system, "system-ui", "Segoe UI", Roboto,
"Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif,
"Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol",
"Noto Color Emoji";
}
body {
padding: 16px;
overflow: auto;
background-color: transparent;
}
</style>
</head>
<body>
<div class="example-wrapper">
<div class="example-buttons">
<div class="example-button-row">
<button onclick="startBatchEdit()">Start Batch Edit</button>
<button onclick="commitBatchEdit()">Commit Batch Edit</button>
<button onclick="cancelBatchEdit()">Cancel Batch Edit</button>
</div>
<div class="example-button-row">
<button onclick="startEdit()">Start Edit</button>
<button onclick="stopEdit()">Stop Edit</button>
<button onclick="cancelEdit()">Cancel Edit</button>
</div>
<div class="example-button-row">
<button onclick="getEditingCells()">Get Editing Cells</button>
</div>
</div>
<div class="grid-wrapper">
<div id="myGrid"></div>
</div>
</div>
<script>
(function () {
const appLocation = "";
window.__basePath = appLocation;
})();
</script>
<script src="https://cdn.jsdelivr.net/npm/ag-grid-enterprise@34.2.0/dist/ag-grid-enterprise.min.js?t=1757495020203"></script>
<script src="main.js"></script>
<link rel="stylesheet" href="styles.css" />
</body>
</html>
{
"name": "ag-grid-example",
"dependencies": {
"ag-grid-community": "34.1.2",
"ag-grid-enterprise": "34.1.2"
},
"devDependencies": {
"@types/node": "^22"
}
}