App.vue
<template>
<div id="app">
<ejs-grid
id="Grid"
:dataSource="data"
:allowPaging="true"
:allowFiltering="true"
:filterSettings="filterSettings"
ref="pgridtable"
>
<e-columns>
. . . . . . .
<e-column field="ShipCountry" :filter="filtercountry" headerText="Ship Country" width="150"></e-column>
</e-columns>
</ejs-grid>
</div>
</template>
<script>
import Vue from "vue";
import { GridPlugin, Page, Filter } from "@syncfusion/ej2-vue-grids";
import { orderData } from "./dataSource";
import { MultiSelect, CheckBoxSelection } from "@syncfusion/ej2-dropdowns";
import { DataManager, DataUtil } from "@syncfusion/ej2-data";
import { createElement } from "@syncfusion/ej2-base";
import { MultiSelectPlugin } from "@syncfusion/ej2-vue-dropdowns";
MultiSelect.Inject(CheckBoxSelection);
Vue.use(MultiSelectPlugin);
Vue.use(GridPlugin);
export default {
name: "App",
data() {
let dropInstance = null;
return {
data: orderData,
filterSettings: { type: "Menu" },
filtercountry: {
ui: {
create: function(args) {
let db = new DataManager(orderData);
let flValInput = createElement("input", { className: "flm-input" });
args.target.appendChild(flValInput);
dropInstance = new MultiSelect({
dataSource: DataUtil.distinct(orderData, "ShipCountry"),
fields: { text: "ShipCountry", value: "Shipcountry" },
placeholder: "Select a value",
popupHeight: "200px",
mode: "CheckBox"
});
dropInstance.appendTo(flValInput);
},
write: function(args) {
dropInstance.value = args.filteredValue;
},
read: function(args) {
args.fltrObj.filterByColumn(
args.column.field,
"contains",
dropInstance.value
);
}
}
}
};
},
methods: {
},
provide: {
grid: [Page, Filter]
}
};
</script>
<style>
@import "https://cdn.syncfusion.com/ej2/material.css";
</style>
|
read: function(args) {
args.fltrObj.filterSettings.columns = []; //it helps to clear the previous predicate values
args.fltrObj.filterByColumn(
args.column.field,
"equal",
dropInstance.value
);
}
|