Thread ID: |
Created: |
Updated: |
Platform: |
Replies: |
143916 | Apr 10,2019 11:42 AM UTC | Sep 2,2020 01:16 PM UTC | Angular - EJ 2 | 14 |
![]() |
Tags: Grid |
ngOnInit(): void {
this.data = new DataManager({
url: 'Home/UrlDatasource',
adaptor: new UrlAdaptor
});
} |
public IActionResult UrlDatasource([FromBody]DataManagerRequest dm)
{
IEnumerable DataSource = OrdersDetails.GetAllRecords();
DataOperations operation = new DataOperations();
if (dm.Sorted != null && dm.Sorted.Count > 0) //Sorting
{
DataSource = operation.PerformSorting(DataSource, dm.Sorted);
}
if (dm.Where != null && dm.Where.Count > 0) //Filtering
{
DataSource = operation.PerformFiltering(DataSource, dm.Where, dm.Where[0].Operator);
}
IEnumerable GroupDs = new List<object>(); ;
if (dm.Group != null)
{
GroupDs = operation.PerformSelect(DataSource, dm.Group);
}
int count = DataSource.Cast<OrdersDetails>().Count();
if (dm.Skip != 0)
{
DataSource = operation.PerformSkip(DataSource, dm.Skip); //Paging
}
if (dm.Take != 0)
{
DataSource = operation.PerformTake(DataSource, dm.Take);
}
return dm.RequiresCounts ? Json(new { result = DataSource, count = count, groupDs = GroupDs }) : Json(DataSource);
}
|
|
<ejs-grid #customerGrid id='grid' class="margin-top-5 expense-grid-margin pane"
allowSorting="true" height='100%' width='100%' allowPaging='true' [allowSelection]='true'
[dataSource]='data | async' (dataSourceChanged)='dataSourceChanged($event)'
(dataStateChange)= 'dataStateChange($event)' [pageSettings]='pageOptions'>
<e-columns>
<e-column type='checkbox' width='30'></e-column>
<e-column field='name' headerText='Name' width='110' [validationRules]='validateRule' hideAtMedia='(min-width: 600px)'></e-column>
<e-column field='id' headerText='Id' isPrimaryKey='true' [visible]='false'></e-column>
</e-columns>
</ejs-grid>
component:
constructor(private service: CustomerDataService) {
this.data = service;
}
public dataStateChange(state: DataStateChangeEventArgs): void {
this.service.execute(state);
}
public ngOnInit(): void {
this.pageOptions = { pageSize: 10, pageCount: 5, pageSizes: true};
this.validateRule = {required: true};
const state: any = { skip: 1, take: 10 };
this.service.execute(state);
}service:public execute(state: any, headers?: HttpHeaders | null): void {
this.getData(state, headers).subscribe(x => super.next(x as DataStateChangeEventArgs));
}
protected getData(state: DataStateChangeEventArgs, headers?: HttpHeaders | null): Observable<DataStateChangeEventArgs> {
const pageQuery = `pageNumber=${state.skip}&pageSize=${state.take}`;
const baseFilter = new BaseFilter(state.skip, state.take);
let sortQuery = '';
const d = 'd';
const results = 'results';
const count = '__count';
if ((state.sorted || []).length) {
sortQuery = `&$orderby=` + state.sorted.map((obj: Sorts) => {
return obj.direction === 'descending' ? `${obj.name} desc` : obj.name;
}).reverse().join(',');
}
const expandedHeaders = this.prepareHeader(headers);
return this.http.get(this.baseUrl + '?pageNumber=' + baseFilter.pageNumber + '&pageSize=' + baseFilter.pageSize, expandedHeaders)
.map((res: any) => ({
result: state.take > 0 ? res.data.slice(state.skip, state.skip + state.take) : res,
count: res.totalCount
} as DataResult))
.pipe((data: any) => data);
}response json:(data has just one row, but it returns 10 rows actually){"data":[{"id":4927,"name":"test customer","phone":"6301482799","customerAdded":"2019-09-20"],"pageNumber":1,"nextPageNumber":2,"prevPageNumber":1,"lastPage":false,"firstPage":true,"pageSize":10,"totalCount":4746,"totalPageCount":475}
return this.http.get(this.baseUrl + '?pageNumber=' + baseFilter.pageNumber + '&pageSize=' + baseFilter.pageSize, expandedHeaders)
// .pipe(map((response: any) => response.json()))
.pipe(map((response: any) => (<DataResult>{
result: response.result,
count: response.count
})))
.pipe((data: any) => data);
@Component({
selector: "control-content",
templateUrl: `async-pipe.html`,
providers: [OrdersService]
})
export class AsyncPipeComponent {
public state: DataStateChangeEventArgs;
public filterOptions = { type: "Excel" };
constructor(public service: OrdersService) {
this.data = service;
}
public dataStateChange(state: DataStateChangeEventArgs): void {
if (
state.action.requestType === "filterchoicerequest" || state.action.requestType === "filtersearchbegin"
) {
this.service.getData(state).subscribe(e => state.dataSource(e)); // for filterchoicerequest and filtersearchbegin you need to return JSON object alone no need to send count
} else {
this.service.execute(state);
}
} |
public execute(state: any): void {
this.getData(state).subscribe(x => super.next(x));
}
public getData(state: DataStateChangeEventArgs): Observable<DataStateChangeEventArgs> {
. . . . .
return this.http
.get(`${this.BASE_URL}?${pageQuery}${sortQuery}${filterQuery}&$count=true`)
.pipe(map((response: any) => response.json()))
.pipe(map((response: any) => {
return state.dataSource === undefined ? (<DataResult>{
result: response['value'],
count: parseInt(response['@odata.count'], 10),
}) : response['value'];
}))
.pipe(map((data: any) => data));
}
}
|
This post will be permanently deleted. Are you sure you want to continue?
Sorry, An error occured while processing your request. Please try again later.
This page will automatically be redirected to the sign-in page in 10 seconds.