By default, the expand/collapse icon will be visible even if the child grid is empty.
You can use rowDataBound
event to hide the icon when there is no record in child grid.
To hide the expand/collapse icon in parent row with no record in child grid, follow the given steps:
Step 1:
Create CSS class with custom style to override the default style of Grid.
.e-row[aria-selected="true"] .e-customizedExpandcell {
background-color: #e0e0e0;
}
.e-grid.e-gridhover tr[role='row']:hover {
background-color: #eee;
}
Step 2:
Add the CSS class to the Grid in the rowDataBound
event handler of Grid.
function rowDataBound(args:any):void{
var filter = args.data.EmployeeID;
var data = new DataManager(this.childGrid.dataSource).executeLocal(new Query().where("EmployeeID", "equal", parseInt(filter), true));
if(data.length == 0) {
//here hide which parent row has no child records
args.row.querySelector('td').innerHTML=" ";
args.row.querySelector('td').className = "e-customizedExpandcell";
}
}
In the below demo, the expand/collapse icon in the row with EmployeeID
as 1
is hidden as it does not have record in child Grid.
ej.base.enableRipple(true)
var dataManger = [{Order:100, ShipName:'Berlin', EmployeeID:2},
{Order:101, ShipName:'Capte', EmployeeID:3},
{Order:102, ShipName:'Marlon', EmployeeID:4},
{Order:103, ShipName:'Black pearl', EmployeeID:5},
{Order:104, ShipName:'Pearl', EmployeeID:6},
{Order:105, ShipName:'Noth bay', EmployeeID:7},
{Order:106, ShipName:'baratna', EmployeeID:8},
{Order:107, ShipName:'Charge', EmployeeID:9},
];
var grid = new ej.grids.Grid({
dataSource: window.employeeData,
allowSorting: true,
rowDataBound:rowDataBound,
columns: [
{ field: 'EmployeeID', headerText: 'Employee ID', textAlign: 'Right', width: 125 },
{ field: 'FirstName', headerText: 'Name', width: 125 },
{ field: 'Title', headerText: 'Title', width: 180 },
{ field: 'City', headerText: 'City', width: 110 },
{ field: 'Country', headerText: 'Country', width: 110 }
],
childGrid: {
dataSource: dataManger,
queryString: 'EmployeeID',
allowPaging: true,
columns: [
{ field: 'Order', headerText: 'Order ID', textAlign: 'Right', width: 120 },
{ field: 'EmployeeID', headerText: 'Employee ID', width: 120 },
{ field: 'ShipName', headerText: 'Ship Name', width: 150 }
],
},
});
grid.appendTo('#Grid');
function rowDataBound(args){
var filter = args.data.EmployeeID;
var data = new ej.data.DataManager(this.childGrid.dataSource).executeLocal(new ej.data.Query().where("EmployeeID", "equal", parseInt(filter), true));
if (data.length == 0) {
//here hide which parent row has no child records
args.row.querySelector('td').innerHTML=" ";
args.row.querySelector('td').className = "e-customizedExpandcell";
}
}
<!DOCTYPE html><html lang="en"><head>
<title>EJ2 Grid</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Typescript Grid Control">
<meta name="author" content="Syncfusion">
<link href="index.css" rel="stylesheet">
<link href="//cdn.syncfusion.com/ej2/21.2.3/ej2-base/styles/material.css" rel="stylesheet">
<link href="//cdn.syncfusion.com/ej2/21.2.3/ej2-grids/styles/material.css" rel="stylesheet">
<link href="//cdn.syncfusion.com/ej2/21.2.3/ej2-buttons/styles/material.css" rel="stylesheet">
<link href="//cdn.syncfusion.com/ej2/21.2.3/ej2-popups/styles/material.css" rel="stylesheet">
<link href="//cdn.syncfusion.com/ej2/21.2.3/ej2-richtexteditor/styles/material.css" rel="stylesheet">
<link href="//cdn.syncfusion.com/ej2/21.2.3/ej2-navigations/styles/material.css" rel="stylesheet">
<link href="//cdn.syncfusion.com/ej2/21.2.3/ej2-dropdowns/styles/material.css" rel="stylesheet">
<link href="//cdn.syncfusion.com/ej2/21.2.3/ej2-lists/styles/material.css" rel="stylesheet">
<link href="//cdn.syncfusion.com/ej2/21.2.3/ej2-inputs/styles/material.css" rel="stylesheet">
<link href="//cdn.syncfusion.com/ej2/21.2.3/ej2-calendars/styles/material.css" rel="stylesheet">
<link href="//cdn.syncfusion.com/ej2/21.2.3/ej2-notifications/styles/material.css" rel="stylesheet">
<link href="//cdn.syncfusion.com/ej2/21.2.3/ej2-splitbuttons/styles/material.css" rel="stylesheet">
<style>
.e-row[aria-selected="true"] .e-customizedExpandcell {
background-color: #e0e0e0;
}
.e-grid.e-gridhover tr[role='row']:hover {
background-color: #eee;
}
.e-expand::before {
content: '\e5b8';
}
.empImage {
margin: 6px 16px;
float: left;
width: 50px;
height: 50px;
}
</style>
<script src="https://cdn.syncfusion.com/ej2/21.2.3/dist/ej2.min.js" type="text/javascript"></script>
<script src="es5-datasource.js" type="text/javascript"></script>
</head>
<body>
<div id="container">
<div id="Grid"></div>
</div>
<script>
var ele = document.getElementById('container');
if(ele) {
ele.style.visibility = "visible";
}
</script>
<script src="index.js" type="text/javascript"></script>
</body></html>