Dynamically Add CSS Classes to Item Rows
Demo
Dynamically Change CSS Classes
<button class="btn btn-sm btn-default" click.trigger="changeDurationBackgroundColor()">Highlight Rows with Duration over 50</button>
<aurelia-slickgrid
grid-id="gridId"
columns.bind="columnDefs"
options.bind="gridOptions"
dataset.bind="myDataset"
on-aurelia-grid-created.trigger="aureliaGridReady($event.detail)">
</aurelia-slickgrid>export class Example {
// get the SlickGrid Grid & DataView object references
aureliaGridReady(aureliaGrid : AureliaGridInstance) {
this.aureliaGrid = aureliaGrid;
this.dataView = aureliaGrid.dataView;
this.grid = aureliaGrid.slickGrid;
}
/**
* Change the Duration Rows Background Color
* You need to get previous SlickGrid DataView Item Metadata and override it
*/
changeDurationBackgroundColor() {
this.dataView.getItemMetadata = this.updateItemMetadataForDurationOver50(this.dataView.getItemMetadata);
// also re-render the grid for the styling to be applied right away
this.grid.invalidate();
}
/**
* Override the SlickGrid Item Metadata, we will add a CSS class on all rows with a Duration over 50
* For more info, you can see this SO https://stackoverflow.com/a/19985148/1212166
*/
updateItemMetadataForDurationOver50(previousItemMetadata: any) {
const newCssClass = 'duration-bg';
return (rowNumber: number) => {
const item = this.dataView.getItem(rowNumber);
let meta = {
cssClasses: ''
};
if (typeof previousItemMetadata === 'object') {
meta = previousItemMetadata(rowNumber);
}
// our condition to check Duration over 50
if (meta && item && item.duration) {
const duration = +item.duration; // convert to number
if (duration > 50) {
meta.cssClasses = (meta.cssClasses || '') + ' ' + newCssClass;
}
}
return meta;
};
}
}On Page Load
Last updated