BoldSignEasily embed eSignatures in your .NET applications. Free sandbox with native SDK available.
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));
}
}
|