filterSettings: FilterSettingsModel = {type: 'Menu', mode: 'OnEnter'}
OrderController.cs
public object Get()
{
var queryString = Request.Query;
var data = OrdersDetails.GetAllRecords().ToList();
string sort = queryString["$orderby"]; //sorting
string filter = queryString["$filter"];
string auto = queryString["$inlineCount"];
if (filter != null)
{
var newfiltersplits = filter;
var filtersplits = newfiltersplits.Split('(', ')', ' ');
var filterfield = filtersplits[1];
var filtervalue = filtersplits[3];
if(filtersplits.Length == 5)
{
if (filtersplits[1] == "tolower")
{
filterfield = filter.Split('(', ')', '\'')[2];
filtervalue = filter.Split('(', ')', '\'')[4];
}
}
if (filtersplits.Length != 5)
{
filterfield = filter.Split('(', ')', '\'')[3];
filtervalue = filter.Split('(', ')', '\'')[5];
}
switch (filterfield)
{
case "OrderID":
data = (from cust in data
where cust.OrderID.ToString() == filtervalue.ToString()
select cust).ToList();
break;
case "EmployeeID":
data = (from cust in data
where cust.EmployeeID.ToString() == filtervalue.ToString()
select cust).ToList();
break;
case "Verified":
data = (from cust in data
where cust.Verified.ToString() == filtervalue.ToString()
select cust).ToList();
break;
case "CustomerID":
data = (from cust in data
where cust.CustomerID.ToLower().StartsWith(filtervalue.ToString())
select cust).ToList();
break;
case "ShipCity":
data = (from cust in data
where cust.ShipCity.ToLower().StartsWith(filtervalue.ToString())
select cust).ToList();
break;
}
}
} |
fetchdata.component.html
<ejs-grid #grid [dataSource]='data' allowFiltering="true" allowPaging="true" [filterSettings]='filterSettings' [editSettings]='editSettings' [toolbar]='toolbar' allowSorting="true" height="320">
<e-columns>
. . . . . .
<e-column field='CustomerID' [filter]= 'filter' headerText='Customer Name' [validationRules]='emailAddRules' width='150'></e-column>
. . . . . .
</e-columns>
</ejs-grid>
|
fetchdata.component.ts
export class FetchDataComponent {
public data: any;
public filter: any;
public flValInput: any;
@ViewChild('grid')
public grid: GridComponent | undefined;
ngOnInit(): void {
this.filterSettings = { type: "Menu"};
this.editSettings = { allowEditing: true, allowAdding: true, allowDeleting: true };
this.filter = {
ui: {
create: (args: { target: Element, Column: Object }) => {
this.flValInput = createElement('input', { className: 'e-input' });
args.target.appendChild(this.flValInput);
},
write: (args: { column: Object, target: Element, parent: any, filteredValue: number | string }) => {
(this.flValInput as any).value = args.filteredValue == undefined ? "" : args.filteredValue;
},
read: (args: { target: Element, column: any, operator: string, fltrObj: any }) => {
args.fltrObj.filterByColumn(args.column.field, args.operator, (args as any).element.value);
}
},
};
this.data = new DataManager({
url: 'api/Orders',
adaptor: new WebApiAdaptor
});
}
} |
public object Get()
{
var queryString = Request.Query;
var data = OrdersDetails.GetAllRecords().ToList();
string sort = queryString["$orderby"]; //sorting
string filter = queryString["$filter"];
string auto = queryString["$inlineCount"];
if (sort != null) //Sorting
{
switch (sort)
{
case "OrderID":
if (sort.Substring(sort.IndexOf(' ') + 1) != null)
data = data.OrderByDescending(x => x.OrderID).ToList();
else
data = data.OrderBy(x => x.OrderID).ToList();
break;
case "CustomerID":
if (sort.Substring(sort.IndexOf(' ') + 1) != null)
data = data.OrderByDescending(x => x.CustomerID).ToList();
else
data = data.OrderBy(x => x.CustomerID).ToList();
break;
case "ShipCity":
if (sort.Substring(sort.IndexOf(' ') + 1) != null)
data = data.OrderByDescending(x => x.ShipCity).ToList();
else
data = data.OrderBy(x => x.ShipCity).ToList();
break;
}
}
if (filter != null)
{
var newfiltersplits = filter;
var filtersplits = newfiltersplits.Split('(', ')', ' ');
var filterfield = filtersplits[1];
var filtervalue = filtersplits[3];
if(filtersplits.Length == 5)
{
if (filtersplits[1] == "tolower")
{
filterfield = filter.Split('(', ')', '\'')[2];
filtervalue = filter.Split('(', ')', '\'')[4];
}
}
if (filtersplits.Length != 5)
{
filterfield = filter.Split('(', ')', '\'')[3];
filtervalue = filter.Split('(', ')', '\'')[5];
}
switch (filterfield)
{
case "OrderID":
data = (from cust in data
where cust.OrderID.ToString() == filtervalue.ToString()
select cust).ToList();
break;
case "EmployeeID":
data = (from cust in data
where cust.EmployeeID.ToString() == filtervalue.ToString()
select cust).ToList();
break;
case "Verified":
data = (from cust in data
where cust.Verified.ToString() == filtervalue.ToString()
select cust).ToList();
break;
case "CustomerID":
data = (from cust in data
where cust.CustomerID.ToLower().StartsWith(filtervalue.ToString())
select cust).ToList();
break;
case "ShipCity":
data = (from cust in data
where cust.ShipCity.ToLower().StartsWith(filtervalue.ToString())
select cust).ToList();
break;
}
}
int skip = Convert.ToInt32(queryString["$skip"]); //Handle pagination here
int take = Convert.ToInt32(queryString["$top"]);
if (auto ==null)
{
return new { Items = data};
}
else
{
return take != 0 ? new { Items = data.Skip(skip).Take(take).ToList(), Count = data.Count() } : new { Items = data, Count = data.Count() };
}
} |
The sample response object should look like below.
{
Items: [{..}, {..}, {..}, ...],
Count: 830
}
|
Hello, has this issue been resolved in a public release? I have the same issue as both Rafael and Dan, but I am unable to use the workaround that they have used.
My grid is complex and allows for filtering of different types, sorting and paging both on parent and child grids which use the DataManagerRequest object to process the different requests server side.
Due to the complexity, I'm unable to determine if the request for data is due to a filtering event, a sorting event or a paging event, therefor I'm unable to return the data in a different format only if the call was made by an auto-complete filter call.
Thanks,
Paul
public object Get()
{
var queryString = Request.Query;
var data = OrdersDetails.GetAllRecords().ToList();
string filter = queryString["$filter"];
string auto = queryString["$inlineCount"];
. . . . .
. . . . .
if (auto ==null) // This condition will be executed for the auto complete request
{
return new { Items = data};
}
else
{
return take != 0 ? new { Items = data.Skip(skip).Take(take).ToList(), Count = data.Count() } : new { Items = data, Count = data.Count() };
}
} |