Using tab inside the dialog editing in EJ2 JavaScript Treegrid control
27 Apr 202315 minutes to read
You can use tab
component inside dialog edit UI using dialog template feature. The dialog template feature can be enabled by defining editSettings.mode
as Dialog
and editSetting.template
as SCRIPT element ID or HTML string which holds the template.
The following example demonstrate the usage of tab control inside the dialog template.
ej.treegrid.TreeGrid.Inject(ej.treegrid.Edit,ej.treegrid.Toolbar);
var PriorityData = ej.data.DataUtil.distinct(projectData, "Priority", true);
var treegrid = new ej.treegrid.TreeGrid({
dataSource: window.projectData,
idMapping: "TaskID",
idMapping: "TaskID",
parentIdMapping: "parentID",
treeColumnIndex: 1,
height: 273,
toolbar: ["Add", "Edit", "Delete", "Update", "Cancel"],
editSettings: {
allowEditing: true,
allowAdding: true,
allowDeleting: true,
mode: "Dialog",
template: "#dialogtemplate"
},
actionComplete: actionComplete,
columns: [
{ field: "TaskID", headerText: "Task ID", textAlign: "Right", isPrimaryKey: true, width: 70 },
{ field: "TaskName", headerText: "Task Name", width: 100 },
{ field: "StartDate", headerText: "Start Date", textAlign: "Right", width: 100, editType: "datepickeredit",
format: { skeleton: "yMd", type: "date" } },
{ field: "EndDate", headerText: "End Date", textAlign: "Right", width: 90, editType: "datepickeredit",
format: { skeleton: "yMd", type: "date" } },
{ field: "Duration", headerText: "Duration", textAlign: "Right", width: 90 },
{ field: "Priority", headerText: "Priority", width: 90 }
]
});
treegrid.appendTo("#TreeGrid");
function actionComplete(args) {
if (args.requestType === "beginEdit" || args.requestType === "add") {
var tabObj = new ej.navigations.Tab({
showCloseButton: false,
selecting: e => {
if (e.isSwiped) {
e.cancel = true;
}
if (e.selectingIndex === 1) {
e.cancel = !validate(1);
}
},
items: [
{ header: { text: "Details" }, content: "#tab1" },
{ header: { text: "Verify" }, content: "#tab2" }
]
});
tabObj.appendTo("#edittab");
new ej.dropdowns.DropDownList(
{
value: args.rowData.Priority,
popupHeight: "300px",
floatLabelType: "Always",
dataSource: PriorityData,
fields: { text: "Priority", value: "Priority" },
placeholder: "Priority"
},
args.form.elements.namedItem("Priority")
);
new ej.inputs.NumericTextBox(
{ value: args.rowData.Duration, placeholder: "Duration" },
args.form.elements.namedItem("Duration")
);
// Set initail Focus
if (args.requestType === "beginEdit") {
args.form.elements.namedItem("TaskName").focus();
}
document.getElementById("next").onclick = () => {
moveNext();
};
function validate(tab) {
var valid = true;
[].slice
.call(document.getElementById("tab" + tab).querySelectorAll("[name]"))
.forEach(element => {
element.form.ej2_instances[0].validate(element.name);
if (element.getAttribute("aria-invalid") === "true") {
valid = false;
}
});
if (!valid) {
return false;
}
return true;
}
function moveNext() {
if (validate(1)) {
tabObj.select(1);
}
}
document.getElementById("submit").onclick = () => {
if (validate(2)) {
treegrid.endEdit();
}
};
}
}
<!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="https://cdn.syncfusion.com/ej2/23.2.4/ej2-base/styles/material.css" rel="stylesheet">
<link href="https://cdn.syncfusion.com/ej2/23.2.4/ej2-grids/styles/material.css" rel="stylesheet">
<link href="https://cdn.syncfusion.com/ej2/23.2.4/ej2-treegrid/styles/material.css" rel="stylesheet">
<link href="https://cdn.syncfusion.com/ej2/23.2.4/ej2-buttons/styles/material.css" rel="stylesheet">
<link href="https://cdn.syncfusion.com/ej2/23.2.4/ej2-popups/styles/material.css" rel="stylesheet">
<link href="https://cdn.syncfusion.com/ej2/23.2.4/ej2-navigations/styles/material.css" rel="stylesheet">
<link href="https://cdn.syncfusion.com/ej2/23.2.4/ej2-dropdowns/styles/material.css" rel="stylesheet">
<link href="https://cdn.syncfusion.com/ej2/23.2.4/ej2-lists/styles/material.css" rel="stylesheet">
<link href="https://cdn.syncfusion.com/ej2/23.2.4/ej2-inputs/styles/material.css" rel="stylesheet">
<link href="https://cdn.syncfusion.com/ej2/23.2.4/ej2-calendars/styles/material.css" rel="stylesheet">
<link href="https://cdn.syncfusion.com/ej2/23.2.4/ej2-splitbuttons/styles/material.css" rel="stylesheet">
<script src="https://cdn.syncfusion.com/ej2/23.2.4/dist/ej2.min.js" type="text/javascript"></script>
<script src="es5-datasource.js" type="text/javascript"></script>
<script src="https://cdn.syncfusion.com/ej2/syncfusion-helper.js" type ="text/javascript"></script>
</head>
<body>
<div id="container">
<div id="TreeGrid"></div>
</div>
<script id="dialogtemplate" type="text/x-template">
<div>
<div id="edittab"></div>
<div id="tab1">
<div class="form-row" >
<div class="form-group col-md-6">
<div class="e-float-input e-control-wrapper">
<input id="TaskID" name="TaskID" type="text" value=${if(isAdd)} '' ${else} ${TaskID} ${/if} ${if(isAdd)} '' ${else} disabled ${/if} />
<span class="e-float-line"></span>
<label class="e-float-text e-label-top" for="TaskID">Task ID</label>
</div>
</div>
</div>
<div class="form-row" >
<div class="form-group col-md-6">
<div class="e-float-input e-control-wrapper">
<input id="TaskName" name="TaskName" type="text" value=${if(isAdd)} '' ${else} ${TaskName} ${/if} />
<span class="e-float-line"></span>
<label class="e-float-text e-label-top" for="CustomerID">Task Name</label>
</div>
</div>
</div>
<button id='next' class='e-info e-btn' style="float: right" type='button'> next</button>
</div>
<div id="tab2" style='display: none'>
<div class="form-row" >
<div class="form-group col-md-6">
<input type="text" name="Duration" id="Duration" value=${if(isAdd)} '' ${else} ${Duration} ${/if} />
</div>
</div>
<div class="form-row">
<div class="form-group col-md-6">
<input type="text" name="Priority" id="Priority" value=${if(isAdd)} '' ${else} ${Priority} ${/if} />
</div>
</div>
<button id='submit' class='e-info e-btn' style="float: right" type='button'> submit</button>
</div>
</div>
</script>
<script>
var ele = document.getElementById('container');
if(ele) {
ele.style.visibility = "visible";
}
</script>
<script src="index.js" type="text/javascript"></script>
</body></html>
You can refer to our
JavaScript Tree Grid
feature tour page for its groundbreaking feature representations. You can also explore our JavaScript Tree Grid exampleJavaScript Tree Grid example
to knows how to present and manipulate data.