|
<ejs-grid #grid id='grid' (created)='onCreated($event)' allowPaging='true' [dataSource]='data' [editSettings]='editSettings' [toolbar]='toolbar'>
<e-columns>
.
.
<e-column headerText='Actions' width=150 [allowEditing]='false'>
<ng-template #template>
<div class='custom-menu'>
<ejs-menu #menu [items]='menuItems' (select)='onSelect($event)'></ejs-menu>
</div>
</ng-template>
</e-column>
</e-columns>
</ejs-grid> |
|
ngOnInit() {
.
.
// Menu items
this.menuItems = [
{
iconCss: 'e-icons MT_Menu',
items: [
{ text: 'Add', iconCss: 'e-icons Add' },
{ text: 'Edit', iconCss: 'e-icons Edit' }
]
}
];
} |
|
// Menu’s select event function
onSelect(args) {
if (args.item.text === Add) {
// Adds a new record
this.grid.addRecord();
} else if (args.item.text === 'Edit') {
// Gets the grid row index based on the selected menu item
var gridRowIndex = parseInt(args.item.controlParent.lItem.closest('.e-row').getAttribute('aria-rowindex'));
// Selects the grid row
this.grid.selectRow(gridRowIndex);
// Enables edit for the selected row
this.grid.startEdit();
}
} |
|
// Icon for the parent menu item
.MT_Menu::before {
content: '\e984';
}
// Icon for add sub menu item
.Add::before {
content: '\e7f9';
}
// Icon for edit sub menu item
.Edit::before {
content: '\e81e';
}
// Removes the default caret icon displayed in the menu
.e-menu-wrapper ul .e-menu-item .e-caret::before {
content: '' !important;
}
// Adjusting position of the menu element
.e-menu-wrapper {
margin-left: 11px;
}
// Modifying the width of the parent menu item
.e-menu-wrapper ul.e-menu {
width: 20px;
}
// Adjusting the position of the parent menu icon
.e-menu-wrapper ul.e-menu .e-menu-item {
padding-left: 3px;
padding-right: 3px;
width: 20px;
} |
|
// Grid’s rowDataBound event function
rowDataBound(args) {
// The menu is hidden initially using its parent element rendered in the column template
args.row.querySelector('.custom-menu').style.visibility = "hidden";
// Mouse enter and leave events are bound to the row elements
args.row.addEventListener('mouseenter', function (args) {
// Menu is shown
args.target.querySelector('.e-menu-wrapper').style.visibility = "visible";
})
args.row.addEventListener('mouseleave', function (args) {
// Menu is hidden
args.target.querySelector('.e-menu-wrapper').style.visibility = "hidden";
})
} |
|
// Grid’s rowDataBound event function
rowDataBound(args) {
// A new element is created and appended as first child to the row element
var tdEle = document.createElement('td');
tdEle.innerHTML = '<div class="e-icons Custom-icon"></div>';
args.row.insertBefore(tdEle, args.row.firstElementChild);
}
dataBound(args) {
var headertable = this.grid.element.querySelector('.e-columnheader');
// A new element is created and appended as first child to the header element
var tdEle = document.createElement('td');
tdEle.innerHTML = '<div></div>';
headertable.insertBefore(tdEle, headertable.firstElementChild);
} |
|
<style>
.Custom-icon:before {
content: '\e7f9';
}
</style> |
|
<e-column field='last.name' headerText='Name'></e-column> |
|
<e-column field='employee.length' headerText='Length'></e-column> |
|
// Button click event function
iconChange(args) {
// Different icon classes that can be added to the Grid are retrieved
var customIconElements = this.grid.element.querySelectorAll('.Custom-icon');
var updatedIconElements = this.grid.element.querySelectorAll('.Updated-icon');
// Icon class is added and removed alternatively
// Here you can update based on your API response
if (customIconElements.length !== 0) {
customIconElements.forEach(x => x.classList.remove('Custom-icon'));
customIconElements.forEach(x => x.classList.add('Updated-icon'));
} else {
updatedIconElements.forEach(x => x.classList.remove('Updated-icon'));
updatedIconElements.forEach(x => x.classList.add('Custom-icon'));
}
} |
|
.Custom-icon:before {
content: '\e7f9';
}
.Updated-icon:before {
content: '\e934';
} |
|
// Menu’s beforeOpen event function
beforeOpen(args) {
var top = args.event.target.closest('.e-menu-wrapper').getBoundingClientRect().top;
var left = args.event.target.closest('.e-menu-wrapper').getBoundingClientRect().left;
args.top = top;
args.left = left;
} |
|
export class AppComponent implements OnInit {
.
.
public initialRender = true;
dataBound(args) {
if (this.initialRender) {
var headertable = this.grid.element.querySelector('.e-columnheader');
var tdEle = document.createElement('td');
tdEle.innerHTML = '<div></div>';
headertable.insertBefore(tdEle, headertable.firstElementChild);
this.initialRender = false;
}
}
.
.
} |
|
args.row.addEventListener('mouseenter', function (args) {
if (args.target.querySelector('.e-menu-wrapper')) {
args.target.querySelector('.e-menu-wrapper').style.visibility = "visible";
}
})
args.row.addEventListener('mouseleave', function (args) {
if (args.target.querySelector('.e-menu-wrapper')) {
args.target.querySelector('.e-menu-wrapper').style.visibility = "hidden";
}
}) |
|
this.menuItems = [
{
iconCss: 'e-icons MT_Menu'
}
]; |
|
.MT_Menu::before {
content: '\e984';
} |
|
ngOnInit() {
.
.
this.menuItems = [
{
iconCss: 'e-icons MT_Menu',
items: [
{ text: 'Add', iconCss: 'e-icons MT_Menu' },
{ text: 'Edit', iconCss: 'e-icons Edit1' }
]
}
];
}
// Menu’s beforeOpen event
beforeOpen(args) {
var top = args.event.target.closest('.e-menu-wrapper').getBoundingClientRect().top;
var left = args.event.target.closest('.e-menu-wrapper').getBoundingClientRect().left;
args.top = top;
args.left = left - 120;
} |
|
.MT_Menu::before {
content: '\e984';
}
.e-menu-icon {
float: right;
} |
|
<ejs-menu #menu [items]='menuItems' (beforeClose)='beforeClose($event)' (beforeOpen)='beforeOpen($event)' (select)='onSelect($event)'></ejs-menu> |
|
beforeOpen(args) {
args.parentItem.parentObj.element.closest('.e-row').classList.add('custom-hover');
}
beforeClose(args) {
args.parentItem.parentObj.element.closest('.e-row').classList.remove('custom-hover');
} |
|
.custom-hover {
background-color: #eee;
color: #000;
} |
|
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css'],
providers: [ToolbarService, DetailRowService],
encapsulation: ViewEncapsulation.None
}) |