<!DOCTYPE html>
<html>
<head>
<script src="https://unpkg.com/ag-grid-community/dist/ag-grid-community.min.noStyle.js"></script>
<link rel="stylesheet" href="https://unpkg.com/ag-grid-community/dist/styles/ag-grid.css">
<link rel="stylesheet" href="https://unpkg.com/ag-grid-community/dist/styles/ag-theme-balham.css">
</head>
<body>
<h1>Dynamic Header Configuration</h1>
<div id="myGrid" style="height: 500px; width:500px;" class="ag-theme-balham"></div>
<script type="text/javascript" charset="utf-8">
const columnDefs = [
];
const gridOptions = {
defaultColDef: {
sortable: true,
filter: 'agTextColumnFilter',
resizable: true
},
columnDefs: columnDefs,
enableSorting: true,
enableFilter: true,
pagination: true
};
const eGridDiv = document.querySelector('#myGrid');
new agGrid.Grid(eGridDiv, gridOptions);
function dynamicallyConfigureColumnsFromObject(anObject){
const colDefs = gridOptions.api.getColumnDefs();
colDefs.length=0;
const keys = Object.keys(anObject)
keys.forEach(key => colDefs.push({field : key}));
gridOptions.api.setColumnDefs(colDefs);
}
// simple JSON example
fetch('https://www.ag-grid.com/example-assets/row-data.json').then(function (response) {
return response.json();
}).then(function (data) {
dynamicallyConfigureColumnsFromObject(data[0])
gridOptions.api.setRowData(data);
})
// SWAPI example
// fetch('https://swapi.dev/api/people/',
// {
// method: 'GET',
// headers: {
// 'Content-Type': 'application/json'
// }
// }
// ).then(function (response) {
// return response.json();
// }).then(function (data) {
// dynamicallyConfigureColumnsFromObject(data.results[0])
// gridOptions.api.setRowData(data.results);
// })
</script>
</body>
</html>
# Dynamically setting AG Grid Column Headers from JSON