|
Index.html
@(Html.EJS().TreeGrid("TreeGrid")
.DataSource(dataManager => { dataManager.Url("/TreeGrid/UrlDatasource").Adaptor("UrlAdaptor"); })
.AllowPaging().PageSettings(page => page.PageSize(12))
.HasChildMapping("isParent").IdMapping("TaskID").ParentIdMapping("ParentItem")
.Columns(col =>{
col.Field("TaskID").HeaderText("Task ID").IsPrimaryKey(true).Width(110.Add();
. . .
}).TreeColumnIndex(1).Render())
Controller:-
public ActionResult UrlDatasource(DataManagerRequest dm)
{
if (TreeData.tree.Count == 0)
TreeData.GetTree();
IEnumerable DataSource = TreeData.tree;
DataOperations operation = new DataOperations();
if (dm.Where != null && dm.Where.Count > 0)
{
DataSource = operation.PerformFiltering(DataSource, dm.Where, "and");
}
if (dm.Sorted != null && dm.Sorted.Count > 0)
{
DataSource = operation.PerformSorting(DataSource, dm.Sorted);
}
var count = DataSource.ToList<TreeData>().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 }) : Json(DataSource);
}
|
|
@(Html.EJS().TreeGrid("TreeGrid")
.DataSource(dataManager => { dataManager.Url("/Home/UrlDatasource").Adaptor("UrlAdaptor"); })
.AllowPaging()
.LoadChildOnDemand(true)
.HasChildMapping("isParent").IdMapping("TaskID").ParentIdMapping("ParentItem")
.Columns(col =>{
col.Field("TaskID").HeaderText("Task ID").IsPrimaryKey(true).Width(110).Add();
. . .
}).TreeColumnIndex(1).Render())
Serverside:-
public ActionResult UrlDatasource(DataManagerRequest dm)
{
if (TreeData.tree.Count == 0)
TreeData.GetTree();
IEnumerable DataSource = TreeData.tree;
DataOperations operation = new DataOperations();
if (dm.Where != null && dm.Where.Count > 0)
{
DataSource = operation.PerformFiltering(DataSource, dm.Where, "and"); //perform Filtering
}
if (dm.Sorted != null && dm.Sorted.Count > 0)
{
DataSource = operation.PerformSorting(DataSource, dm.Sorted);
}
var count = DataSource.ToList<TreeData>().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 records
}
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.tree; //use total dataSource here
string IdMapping = "TaskID"; //define your IdMapping fieldname here
int[] TaskIds = new int[0];
foreach (var rec in datasource)
{
int taskid = (int)rec.GetType().GetProperty(IdMapping).GetValue(rec);
TaskIds = TaskIds.Concat(new int[] { taskid }).ToArray();
}
IEnumerable ChildRecords = null;
foreach (int id in TaskIds)
{
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) // perform Sorting
{
ChildRecords = operation.PerformSorting(ChildRecords, dm.Sorted);
}
datasource = ((IEnumerable<object>)datasource).Concat((IEnumerable<object>)ChildRecords);
}
return datasource;
}
|