Column reorder in Vue Grid component
16 Mar 202310 minutes to read
Reordering can be done by drag and drop of a particular column header from one index to another index within the grid.
To enable reordering, set the allowReordering
to true.
To use Reordering, you need to inject Reorder
module in the provide
section.
<template>
<div id="app">
<ejs-grid :dataSource="data" :allowReordering='true' height='315px'>
<e-columns>
<e-column field='OrderID' headerText='Order ID' textAlign='Right' width=90></e-column>
<e-column field='CustomerID' headerText='Customer ID' width=120></e-column>
<e-column field='Freight' headerText='Freight' textAlign='Right' format='C2' width=90></e-column>
<e-column field='OrderDate' headerText='Order Date' textAlign='Right' format='yMd' type='date' width=120></e-column>
</e-columns>
</ejs-grid>
</div>
</template>
<script>
import Vue from "vue";
import { GridPlugin, Reorder } from "@syncfusion/ej2-vue-grids";
import { data } from './datasource.js';
Vue.use(GridPlugin);
export default {
data() {
return {
data: data
};
},
provide: {
grid: [Reorder]
}
}
</script>
<style>
@import "../node_modules/@syncfusion/ej2-vue-grids/styles/material.css";
</style>
- You can disable reordering a particular column by setting the
columns.allowReordering
to false.- In RTL mode, you can click and drag the left edge of the header cell to resize the column.
Reorder single column
Grid have option to reorder Columns either by Interaction or by using the reorderColumns
method. In the below sample, ShipCity
column is reordered to last column position by using the method.
In the below sample, Ship City
and Ship Region
column is reordered to last column position.
<template>
<div id="app">
<ejs-button id='reorderSingleCol' @click.native='reorder'>Reorder Ship City to Last</ejs-button>
<ejs-grid ref='grid' :dataSource="data" :allowReordering='true' height='315px'>
<e-columns>
<e-column field='OrderID' headerText='Order ID' textAlign='Right' width=90></e-column>
<e-column field='CustomerID' headerText='Customer ID' width=120></e-column>
<e-column field='ShipCity' headerText='Ship City' width=100></e-column>
<e-column field='ShipRegion' headerText='Ship Region' width=80></e-column>
<e-column field='ShipName' headerText='Ship Name' width=80></e-column>
</e-columns>
</ejs-grid>
</div>
</template>
<script>
import Vue from "vue";
import { GridPlugin, Reorder } from "@syncfusion/ej2-vue-grids";
import { ButtonPlugin } from "@syncfusion/ej2-vue-buttons";
import { data } from './datasource.js';
Vue.use(GridPlugin);
Vue.use(ButtonPlugin);
export default {
data() {
return {
data: data
};
},
provide: {
grid: [Reorder]
},
methods: {
reorder: function() {
this.$refs.grid.reorderColumns('ShipCity','ShipName');
}
}
}
</script>
<style>
@import "../node_modules/@syncfusion/ej2-vue-grids/styles/material.css";
#reorderSingleCol {
text-transform: none;
}
</style>
Reorder multiple columns
User can reorder a single column at a time by Interaction. Sometimes we need to have reorder multiple columns at the same time, It can be achieved through programmatically by using reorderColumns
method.
In the below sample, Ship City
and Ship Region
column is reordered to last column position.
<template>
<div id="app">
<ejs-button id='reorderMultipleCols' @click.native='reorder'>Reorder Ship City and Ship Region to Last</ejs-button>
<ejs-grid ref='grid' :dataSource="data" :allowReordering='true' height='315px'>
<e-columns>
<e-column field='OrderID' headerText='Order ID' textAlign='Right' width=90></e-column>
<e-column field='CustomerID' headerText='Customer ID' width=120></e-column>
<e-column field='ShipCity' headerText='Ship City' width=100></e-column>
<e-column field='ShipRegion' headerText='Ship Region' width=80></e-column>
<e-column field='ShipName' headerText='Ship Name' width=80></e-column>
</e-columns>
</ejs-grid>
</div>
</template>
<script>
import Vue from "vue";
import { GridPlugin, Reorder } from "@syncfusion/ej2-vue-grids";
import { ButtonPlugin } from "@syncfusion/ej2-vue-buttons";
import { data } from './datasource.js';
Vue.use(GridPlugin);
Vue.use(ButtonPlugin);
export default {
data() {
return {
data: data
};
},
provide: {
grid: [Reorder]
},
methods: {
reorder: function() {
this.$refs.grid.reorderColumns(['ShipCity','ShipRegion'],'ShipName');
}
}
}
</script>
<style>
@import "../node_modules/@syncfusion/ej2-vue-grids/styles/material.css";
#reorderMultipleCols {
text-transform: none;
}
</style>
Reorder events
During the reorder action, the grid component triggers the below three events.
- The
columnDragStart
event triggers when column header element drag (move) starts. - The
columnDrag
event triggers when column header element is dragged (moved) continuously. - The
columnDrop
event triggers when a column header element is dropped on the target column.
<template>
<div id="app">
<ejs-grid ref='grid' :dataSource="data" :allowReordering='true' :columnDrag='columnDrag' :columnDrop='columnDrop' :columnDragStart='columnDragStart' height='315px'>
<e-columns>
<e-column field='OrderID' headerText='Order ID' textAlign='Right' width=90></e-column>
<e-column field='CustomerID' headerText='Customer ID' width=120></e-column>
<e-column field='ShipCity' headerText='Ship City' width=100></e-column>
<e-column field='ShipRegion' headerText='Ship Region' width=80></e-column>
<e-column field='ShipName' headerText='Ship Name' width=80></e-column>
</e-columns>
</ejs-grid>
</div>
</template>
<script>
import Vue from "vue";
import { GridPlugin, Reorder } from "@syncfusion/ej2-vue-grids";
import { ButtonPlugin } from "@syncfusion/ej2-vue-buttons";
import { data } from './datasource.js';
Vue.use(GridPlugin);
Vue.use(ButtonPlugin);
export default {
data() {
return {
data: data
};
},
provide: {
grid: [Reorder]
},
methods: {
columnDragStart: function() {
alert('columnDragStart event is Triggered');
},
columnDrag: function() {
alert('columnDrag event is Triggered');
},
columnDrop: function() {
alert('columnDrop event is Triggered');
}
}
}
</script>
<style>
@import "../node_modules/@syncfusion/ej2-vue-grids/styles/material.css";
#reorderMultipleCols {
text-transform: none;
}
</style>