|
<h2>RemoteData</h2>
<div id="TreeGrid"></div>
<script>
let data = new ej.data.DataManager({
url: "/Home/DataSource",
…..
adaptor: new ej.data.UrlAdaptor()
});
let treeGridObj = new ej.treegrid.TreeGrid({
dataSource: data,
…..,
loadChildOnDemand: true,
toolbar: ['Add', 'Edit', 'Delete', 'Update', 'Cancel'],
…….
</script>
public IActionResult DataSource([FromBody] DataManagerRequest dm)
{
IEnumerable DataSource = TreeData.GetSelfData();
….
var count = TreeData.GetSelfData().Count();
if (dm.Skip != 0)
{
DataSource = operation.PerformSkip(DataSource, dm.Skip); //Paging
}
if (dm.Take != 0)
{
DataSource = operation.PerformTake(DataSource, dm.Take);
}
if (dm.Where != null)
{
DataSource = CollectChildRecords(DataSource, dm); // method to collect child record
}
return dm.RequiresCounts ? Json(new { result = DataSource, count = count }) : Json(DataSource);
}
public IEnumerable CollectChildRecords(IEnumerable datasource, DataManagerRequest dm)
{
DataOperations operation = new DataOperations();
IEnumerable DataSource = TreeData.GetSelfData(); // use the total DataSource here
string IdMapping = "TaskId";// define your IdMapping field name here
int[] Ids = new int[0];
foreach (var rec in datasource)
{
int ID = (int)rec.GetType().GetProperty(IdMapping).GetValue(rec);
Ids = Ids.Concat(new int[] { ID }).ToArray();
}
IEnumerable ChildRecords = null;
foreach (int id in Ids)
{
dm.Where[0].value = id;
IEnumerable records = operation.PerformFiltering(DataSource, dm.Where, dm.Where[0].Operator);
ChildRecords = ChildRecords == null || (ChildRecords.AsQueryable().Count() == 0) ? records :
((IEnumerable<object>)ChildRecords).Concat((IEnumerable<object>)records);
}
if (ChildRecords != null)
{
ChildRecords = CollectChildRecords(ChildRecords, dm);
if (dm.Sorted != null && dm.Sorted.Count > 0)
{
ChildRecords = operation.PerformSorting(ChildRecords, dm.Sorted);
}
datasource = ((IEnumerable<object>)datasource).Concat((IEnumerable<object>)ChildRecords);
}
return datasource;
}
|