Command column editing in Vue Treegrid component
11 Jun 202411 minutes to read
The command column provides an option to add CRUD action buttons in a column. This can be defined by the column.commands
property.
The available built-in command buttons are:
Command Button | Actions |
---|---|
Edit | Edit the current row. |
Delete | Delete the current row. |
Save | Update the edited row. |
Cancel | Cancel the edited state. |
<template>
<div id="app">
<ejs-treegrid :dataSource='data' childMapping='subtasks' :treeColumnIndex='1' height='270px' :editSettings='editSettings'>
<e-columns>
<e-column field='taskID' :isPrimaryKey='true' headerText='Task ID' width=90 textAlign='Right'></e-column>
<e-column field='taskName' headerText='Task Name' width=180></e-column>
<e-column field='duration' headerText='Duration' width=80 textAlign='Right'></e-column>
<e-column headerText='Manage Records' :commands='commands' width=80 textAlign='Right'></e-column>
</e-columns>
</ejs-treegrid>
</div>
</template>
<script setup>
import { provide } from "vue";
import { TreeGridComponent as EjsTreegrid, Edit, CommandColumn, ColumnDirective as EColumn, ColumnsDirective as EColumns } from "@syncfusion/ej2-vue-treegrid";
import { sampleData } from "./datasource.js";
const data = sampleData;
const editSettings = { allowEditing: true, allowAdding: true, allowDeleting: true, mode: 'Row' };
const commands = [{ type: 'Edit', buttonOption: { cssClass: 'e-flat', iconCss: 'e-edit e-icons' } },
{ type: 'Delete', buttonOption: { cssClass: 'e-flat', iconCss: 'e-delete e-icons' } },
{ type: 'Save', buttonOption: { cssClass: 'e-flat', iconCss: 'e-update e-icons' } },
{ type: 'Cancel', buttonOption: { cssClass: 'e-flat', iconCss: 'e-cancel-icon e-icons' } }
];
provide('treegrid', [ Edit, CommandColumn ]);
</script>
<template>
<div id="app">
<ejs-treegrid :dataSource='data' childMapping='subtasks' :treeColumnIndex='1' height='270px' :editSettings='editSettings'>
<e-columns>
<e-column field='taskID' :isPrimaryKey='true' headerText='Task ID' width=90 textAlign='Right'></e-column>
<e-column field='taskName' headerText='Task Name' width=180></e-column>
<e-column field='duration' headerText='Duration' width=80 textAlign='Right'></e-column>
<e-column headerText='Manage Records' :commands='commands' width=80 textAlign='Right'></e-column>
</e-columns>
</ejs-treegrid>
</div>
</template>
<script>
import { TreeGridComponent, Edit, CommandColumn, ColumnDirective, ColumnsDirective } from "@syncfusion/ej2-vue-treegrid";
import { sampleData } from "./datasource.js";
export default {
name: "App",
components: {
"ejs-treegrid":TreeGridComponent,
"e-columns":ColumnsDirective,
"e-column":ColumnDirective,
},
data() {
return {
data: sampleData,
editSettings: { allowEditing: true, allowAdding: true, allowDeleting: true, mode: 'Row' },
commands: [{ type: 'Edit', buttonOption: { cssClass: 'e-flat', iconCss: 'e-edit e-icons' } },
{ type: 'Delete', buttonOption: { cssClass: 'e-flat', iconCss: 'e-delete e-icons' } },
{ type: 'Save', buttonOption: { cssClass: 'e-flat', iconCss: 'e-update e-icons' } },
{ type: 'Cancel', buttonOption: { cssClass: 'e-flat', iconCss: 'e-cancel-icon e-icons' } }]
};
},
provide: {
treegrid: [ Edit, CommandColumn ]
}
}
</script>
Custom command
The custom command buttons can be added in a column by using the column.commands
property and
the action for the custom buttons can be defined in the buttonOption.click
event.
<template>
<div id="app">
<ejs-treegrid ref='treegrid' :dataSource='data' childMapping='subtasks' :treeColumnIndex='1' height='270px' :editSettings='editSettings'>
<e-columns>
<e-column field='taskID' :isPrimaryKey='true' headerText='Task ID' width=90 textAlign='Right'></e-column>
<e-column field='taskName' headerText='Task Name' width=180></e-column>
<e-column field='duration' headerText='Duration' width=80 textAlign='Right'></e-column>
<e-column headerText='Commands' :commands='commands' width=120></e-column>
</e-columns>
</ejs-treegrid>
</div>
</template>
<script setup>
import { provide, ref } from "vue";
import { TreeGridComponent as EjsTreegrid, Edit, CommandColumn, ColumnDirective, ColumnsDirective } from "@syncfusion/ej2-vue-treegrid";
import { sampleData } from "./datasource.js";
import { closest } from '@syncfusion/ej2-base';
const treegrid = ref(null);
const data = sampleData;
const editSettings = { allowEditing: true, allowAdding: true, allowDeleting: true, mode: 'Row' };
const commands = [{ buttonOption: { content: 'Details', cssClass: 'e-flat', click: onClick } }];
provide('treegrid', [ Edit, CommandColumn ]);
const onClick = function(args) {
let rowIndex = (closest(args.target, '.e-row')).rowIndex;
let data = treegrid.value.ej2Instances.getCurrentViewRecords();
alert(JSON.stringify(data[rowIndex]));
};
</script>
<template>
<div id="app">
<ejs-treegrid ref='treegrid' :dataSource='data' childMapping='subtasks' :treeColumnIndex='1' height='270px' :editSettings='editSettings'>
<e-columns>
<e-column field='taskID' :isPrimaryKey='true' headerText='Task ID' width=90 textAlign='Right'></e-column>
<e-column field='taskName' headerText='Task Name' width=180></e-column>
<e-column field='duration' headerText='Duration' width=80 textAlign='Right'></e-column>
<e-column headerText='Commands' :commands='commands' width=120></e-column>
</e-columns>
</ejs-treegrid>
</div>
</template>
<script>
import { TreeGridComponent, Edit, CommandColumn, ColumnDirective, ColumnsDirective } from "@syncfusion/ej2-vue-treegrid";
import { sampleData } from "./datasource.js";
import { closest } from '@syncfusion/ej2-base';
export default {
name: "App",
components: {
"ejs-treegrid":TreeGridComponent,
"e-columns":ColumnsDirective,
"e-column":ColumnDirective,
},
data() {
return {
data: sampleData,
editSettings: { allowEditing: true, allowAdding: true, allowDeleting: true, mode: 'Row' },
commands: [{ buttonOption: { content: 'Details', cssClass: 'e-flat', click: this.onClick } }]
};
},
provide: {
treegrid: [ Edit, CommandColumn ]
},
methods: {
onClick: function(args) {
let rowIndex = (closest(args.target, '.e-row')).rowIndex;
let data = this.$refs.treegrid.ej2Instances.getCurrentViewRecords();
alert(JSON.stringify(data[rowIndex]));
}
}
}
</script>