|
<script type="text/javascript">
function Click(args) {
var multiselect = document.getElementById("Multiselect").ej2_instances[0];
var grid = document.getElementById("Grid").ej2_instances[0];
var pre = [], predicate, query;
if (multiselect.value != null && multiselect.value.length != 0) {
if (multiselect.value.length > 1) {
for (var i = 0; i < multiselect.value.length; i++) {
pre.push(new ej.data.Predicate('CustomerID', 'equal', multiselect.value[i]));
}
predicate = new ej.data.Predicate.or(pre);
}
else {
predicate = new ej.data.Predicate('CustomerID', 'equal', multiselect.value[0]);
}
query = new ej.data.Query().where(predicate);
}
else {
query = new ej.data.Query();
}
grid.query = query;
grid.refresh();
}
</script> |
Hi Shweta,Thanks for contacting Syncfusion support.From your query, we found that you want to filter the multiple values of the single column without using default Grid filters. By default you can filter only one column in filterByColumn method. So We have achieved your requirement by using query property of the Grid. We have manually created the predicates for selected values and provided that predicates to query property. Finally we have called the refresh method to show the changes in the Grid. Please refer the following code snippet,
<script type="text/javascript">function Click(args) {var multiselect = document.getElementById("Multiselect").ej2_instances[0];var grid = document.getElementById("Grid").ej2_instances[0];var pre = [], predicate, query;if (multiselect.value != null && multiselect.value.length != 0) {if (multiselect.value.length > 1) {for (var i = 0; i < multiselect.value.length; i++) {pre.push(new ej.data.Predicate('CustomerID', 'equal', multiselect.value[i]));}predicate = new ej.data.Predicate.or(pre);}else {predicate = new ej.data.Predicate('CustomerID', 'equal', multiselect.value[0]);}query = new ej.data.Query().where(predicate);}else {query = new ej.data.Query();}grid.query = query;grid.refresh();}</script>
We have attached our sample in the below link. Please refer that sample for further assistance,Refer the following link to know about query property and refresh method of the Grid:Refer the following link to know about predicate:Note : you can’t get filter records through filterSettings.columns because we have achieved by requirement by using grid query.This is not meet your requirement could you please explain more detail about your requirement.Regards,J Mohammed Farook
|
<input id="button" type="button" onclick="Click()" value="Filter" />
@Html.EJS().MultiSelect("Multiselect").Mode(VisualMode.Default).DataSource((string[])ViewBag.Multiselect).Width("300px").Render()
<input id="button2" type="button" onclick="button2()" value="Filter" />
@Html.EJS().MultiSelect("Multiselect2").Mode(VisualMode.Default).DataSource((string[])ViewBag.Multiselect2).Width("300px").Render()
@Html.EJS().Grid("Grid").DataSource( ds => ds.Url("/Home/UrlDataSource").Adaptor("UrlAdaptor")).Columns(col=> {
col.Field("OrderID").IsPrimaryKey(true).HeaderText("Order ID").Width("120").Add();
col.Field("CustomerID").HeaderText("Customer Name").Width("170").Add();
col.Field("EmployeeID").IsPrimaryKey(true).HeaderText("Employee ID").Width("170").Add();
col.Field("ShipCity").HeaderText("Ship City").Width("170").Add();
}).AllowPaging().AllowFiltering(true).FilterSettings(filter => filter.Type(Syncfusion.EJ2.Grids.FilterType.CheckBox)).Render()
<script type="text/javascript">
function Click(args) {
var multiselect = document.getElementById("Multiselect").ej2_instances[0];
var grid = document.getElementById("Grid").ej2_instances[0];
var pre = [], query;
if (multiselect.value.length > 0) {
var predicate = grid.filterSettings.columns || [];
for (var i = 0; i < multiselect.value.length; i++) {
var obj = { field: 'CustomerID', operator: 'equal', uid: grid.getColumnByField('CustomerID').uid, value: multiselect.value[i], predicate: 'or' };
predicate.push(obj);
}
grid.filterSettings.columns = predicate;
}
else {
grid.removeFilteredColsByField('CustomerID');
}
}
function button2(args) {
var multiselect = document.getElementById("Multiselect2").ej2_instances[0];
var grid = document.getElementById("Grid").ej2_instances[0];
var pre = [], query;
if (multiselect.value.length > 0) {
var predicate = grid.filterSettings.columns || [];
for (var i = 0; i < multiselect.value.length; i++) {
var obj = { field: 'ShipCity', operator: 'equal', uid: grid.getColumnByField('ShipCity').uid, value: multiselect.value[i], predicate: 'or' };
predicate.push(obj);
}
grid.filterSettings.columns = predicate;
}
else {
grid.removeFilteredColsByField('ShipCity');
}
}
</script>
|