I'm currently giving ag-grid
a try and trying to build a table where if the user clicks a column value, they are taken to a page containing that entry's details.
How can I make a cell value clickable in ag-grid?
I've tried using valueGetter: this.urlValueGetter
with columnDefs
and:
urlValueGetter(params) {
return '<a href=\'bill/' + params.data.id + '\'>details</a>';
}
but it now looks like this:
I then tried using template: '<a href=\'bill/{id}\'>details</a>'
which does show the cell text as clickable but the id is not replaced. I assume this could work if I could somehow pass in the id?
You want to use a cellRenderer
for that, instead of valueGetter
:
https://www.ag-grid.com/javascript-grid-cell-rendering-components/#gsc.tab=0
Random example from above documentation:
// put the value in bold
colDef.cellRenderer = function(params) {
return '<b>' + params.value.toUpperCase() + '</b>';
}
You can return a string (easier) with your link if you don't want to attach any events.
Otherwise, here's an example of a colDef
if you want to attach events to an element:
{
headerName: 'ID',
field: 'id',
cellRenderer: (params) => {
var link = document.createElement('a');
link.href = '#';
link.innerText = params.value;
link.addEventListener('click', (e) => {
e.preventDefault();
console.log(params.data.id);
});
return link;
}
}
Since you've already used React, you should use frameworkComponent
instead. Somebody mentioned about the overhead of React but because this is a very simple component, I do not think it matters much in this case.
Anyway, here is the example setup.
function LinkComponent(props: ICellRendererParams) {
return (
<a href={"https://yourwebsite/entity/detail?id=" + props.value}>
{props.value}
</a>
);
}
...
// in your render method
<AgGridReact
{...}
columnDefs={[...,{
headerName: "Detail",
field: "detail",
cellRenderer: "LinkComponent"
}]}
frameworkComponents={{
LinkComponent
}}
/>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With