App.vue
<template>
<div id="app">
<ejs-grid
ref="grid"
:dataSource="data"
allowSorting="true"
allowFiltering="true"
:filterSettings="filterOptions"
:actionBegin="actionBegin"
:actionComplete="actionComplete"
>
<e-columns>
<e-column
field="EmployeeID"
headerText="Employee ID"
width="125"
textAlign="Right"
></e-column>
<e-column field="FirstName" headerText="Name" width="120"></e-column>
<e-column field="Title" headerText="Title" width="170"></e-column>
<e-column
field="HireDate"
headerText="Hire Date"
width="135"
textAlign="Right"
format="yMd"
></e-column>
<e-column
field="ReportsTo"
headerText="Reports To"
width="120"
textAlign="Right"
></e-column>
</e-columns>
</ejs-grid>
</div>
</template>
<script>
import Vue from "vue";
import { GridPlugin, Filter } from "@syncfusion/ej2-vue-grids";
import { employeeData } from "./data";
import detailTemplate from "./detailTemplate";
Vue.use(GridPlugin);
export default {
data: () => {
return {
data: employeeData,
flag: false,
filterOptions: { type: "Excel" },
};
},
methods: {
actionComplete: function (args) {
if (args.currentFilteringColumn === "Title" && this.flag) {
this.flag = false;
this.$refs.grid.refreshColumns(); // update the filter change properly.
}
},
actionBegin: function (args) {
if (
args.requestType === "filtering" &&
args.currentFilteringColumn === "FirstName"
) {
this.flag = true;
args.columns.push({ // add the predicates to filter two columns at the same time.
actualFilterValue: {},
actualOperator: {},
field: "Title",
ignoreAccent: false,
isForeignKey: false,
matchCase: false,
operator: "contains",
predicate: "and",
uid: this.$refs.grid.getColumnByField(args.currentFilteringColumn)
.uid,
value: "in",
});
}
},
},
provide: {
grid: [Filter],
},
};
</script>
<style>
@import "https://cdn.syncfusion.com/ej2/material.css";
</style> |
App.vue
<template>
<div id="app">
<button v-on:click="onClick">filter columns</button>
<ejs-grid
ref="grid"
:dataSource="data"
allowSorting="true"
allowFiltering="true"
:filterSettings="filterOptions"
:actionBegin="actionBegin"
:actionComplete="actionComplete"
>
<e-columns>
<e-column
field="EmployeeID"
headerText="Employee ID"
width="125"
textAlign="Right"
></e-column>
<e-column field="FirstName" headerText="Name" width="120"></e-column>
<e-column field="Title" headerText="Title" width="170"></e-column>
<e-column
field="HireDate"
headerText="Hire Date"
width="135"
textAlign="Right"
format="yMd"
></e-column>
<e-column
field="ReportsTo"
headerText="Reports To"
width="120"
textAlign="Right"
></e-column>
</e-columns>
</ejs-grid>
</div>
</template>
<script>
import Vue from "vue";
import { GridPlugin, Filter } from "@syncfusion/ej2-vue-grids";
import { employeeData } from "./data";
import detailTemplate from "./detailTemplate";
import { Query, Predicate } from "@syncfusion/ej2-data";
Vue.use(GridPlugin);
export default {
data: () => {
return {
data: employeeData,
flag: false,
filterOptions: { type: "Menu" },
};
},
methods: {
actionComplete: function (args) {
if (args.currentFilteringColumn === "Title" && this.flag) {
this.flag = false;
this.$refs.grid.refreshColumns();
}
},
onClick: function (args) {
var query = new Query();
this.$refs.grid.query = query.where(
new Predicate("FirstName", "equal", "Nanccy", true).or(
"EmployeeID",
"equal",
"2",
true
)
); // apply the query to the grid component to get the data based on the query.
this.$refs.grid.refresh();
},
actionBegin: function (args) {
if (
args.requestType === "filtering" &&
args.currentFilteringColumn === "FirstName"
) {
console.log(args);
this.flag = true;
args.columns.push({
actualFilterValue: {},
actualOperator: {},
field: "Title",
ignoreAccent: false,
isForeignKey: false,
matchCase: false,
operator: "contains",
predicate: "and",
uid: this.$refs.grid.getColumnByField(args.currentFilteringColumn)
.uid,
value: args.columns[0].value,
});
}
},
},
provide: {
grid: [Filter],
},
};
</script>
<style>
@import "https://cdn.syncfusion.com/ej2/material.css";
</style> |