Skip to content

Commit 9d906cc

Browse files
StoyanGoranovalestoya
authored andcommitted
example: Grid hierarchy persist expanded rows
1 parent 4c6d476 commit 9d906cc

File tree

3 files changed

+198
-2
lines changed

3 files changed

+198
-2
lines changed
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
using System;
2+
using System.Linq;
3+
using Microsoft.AspNetCore.Mvc;
4+
using System.Collections.Generic;
5+
using Kendo.Mvc.UI;
6+
using Kendo.Mvc.Extensions;
7+
using Telerik.Examples.Mvc.Models;
8+
9+
namespace Telerik.Examples.Mvc.Controllers.Grid
10+
{
11+
public class Hierarchy_Persist_Expanded_ChildrenController : Controller
12+
{
13+
private static ICollection<Product> products;
14+
private static ICollection<Person> people;
15+
public IActionResult Hierarchy_Persist_Expanded_Children()
16+
{
17+
if (products == null)
18+
{
19+
var random = new Random();
20+
products = Enumerable.Range(1, 4).Select(i => new Product
21+
{
22+
Discontinued = i % 2 == 1,
23+
ProductID = i,
24+
ProductName = "Product" + i,
25+
UnitPrice = random.Next(1, 1000),
26+
UnitsInStock = random.Next(1, 1000),
27+
UnitsOnOrder = random.Next(1, 1000)
28+
29+
}).ToList();
30+
}
31+
if (people == null)
32+
{
33+
people = Enumerable.Range(1, 10).Select(i => new Person
34+
{
35+
PersonID = i,
36+
BirthDate = DateTime.Now.AddDays(i),
37+
ProductID = i % 2 == 0 ? 1 : 2,
38+
Name = "Name" + i
39+
}).ToList();
40+
}
41+
return View();
42+
}
43+
public ActionResult Read_Products([DataSourceRequest] DataSourceRequest request)
44+
{
45+
return Json(products.ToDataSourceResult(request));
46+
}
47+
48+
[AcceptVerbs("Post")]
49+
public ActionResult Create_Products([DataSourceRequest] DataSourceRequest request, Product product)
50+
{
51+
//save item to database
52+
return Json(new[] { product }.ToDataSourceResult(request, ModelState));
53+
}
54+
55+
[AcceptVerbs("Post")]
56+
public ActionResult Update_Products([DataSourceRequest] DataSourceRequest request, Product product)
57+
{
58+
//save item to database
59+
products.Add(product);
60+
return Json(new[] { product }.ToDataSourceResult(request, ModelState));
61+
}
62+
63+
public ActionResult Read_People([DataSourceRequest] DataSourceRequest request, int productID)
64+
{
65+
return Json(people
66+
.Where(person => person.ProductID == productID)
67+
.ToDataSourceResult(request));
68+
}
69+
70+
[AcceptVerbs("Post")]
71+
public ActionResult Create_People([DataSourceRequest] DataSourceRequest request, Person person)
72+
{
73+
//save child item to database
74+
return Json(new[] { person }.ToDataSourceResult(request, ModelState));
75+
}
76+
77+
[AcceptVerbs("Post")]
78+
public ActionResult Update_People([DataSourceRequest] DataSourceRequest request, Person person)
79+
{
80+
//save child item to database
81+
people.Add(person);
82+
return Json(new[] { person }.ToDataSourceResult(request, ModelState));
83+
}
84+
}
85+
}

Telerik.Examples.Mvc/Telerik.Examples.Mvc/Views/Grid/HierarchyCrud.cshtml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
.Destroy(destroy => destroy.Action("Destroy_Products", "HierarchyCrud"))
1515
.Model(m => {
1616
m.Id(id => id.ProductID);
17-
m.Field(f => f.ProductID).Editable(false);
17+
m.Field(f => f.ProductID).Editable(true);
1818
})
1919
)
2020
.Editable(editable => editable.Mode(GridEditMode.InLine))
@@ -62,7 +62,7 @@
6262
{
6363
model.Id(o => o.PersonID);
6464
model.Field(o => o.ProductID).DefaultValue(0);
65-
model.Field(o => o.PersonID).Editable(false);
65+
model.Field(o => o.PersonID).Editable(true);
6666
})
6767
.Create(create => create.Action("Create_People","HierarchyCrud"))
6868
.Read(read => read.Action("Read_People", "HierarchyCrud", new { productID = "#=ProductID#" }))
Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
@{
2+
ViewData["Title"] = "Hierarchy Persist Expanded Children";
3+
}
4+
5+
<h1>@ViewData["Title"]</h1>
6+
7+
<p>Expand the Detail Template of the Grid and click <b>Add new record</b></p>
8+
9+
@(Html.Kendo().Grid<Product>()
10+
.Name("grid")
11+
.DataSource(dataSource => dataSource
12+
.Ajax()
13+
.Read(read => read.Action("Read_Products", "Hierarchy_Persist_Expanded_Children"))
14+
.Update(update => update.Action("Update_Products", "Hierarchy_Persist_Expanded_Children"))
15+
.Create(create => create.Action("Create_Products", "Hierarchy_Persist_Expanded_Children"))
16+
.Model(m => {
17+
m.Id(id => id.ProductID);
18+
m.Field(f => f.ProductID).Editable(true);
19+
})
20+
)
21+
.Editable(editable => editable.Mode(GridEditMode.InLine))
22+
.ToolBar(t => t.Create())
23+
.Columns(columns =>
24+
{
25+
columns.Bound(product => product.ProductID);
26+
columns.Bound(product => product.ProductName);
27+
columns.Bound(product => product.UnitsInStock);
28+
columns.Bound(product => product.Discontinued);
29+
columns.Bound(product => product.UnitPrice);
30+
columns.Bound(product => product.UnitsOnOrder);
31+
columns.Command(command => {
32+
command.Edit();
33+
command.Destroy();
34+
});
35+
})
36+
.Pageable()
37+
.Sortable()
38+
.Filterable()
39+
.Groupable()
40+
.ClientDetailTemplateId("OrdersTemplate")
41+
.Events(e => e.Edit("onEdit").DetailExpand("onDetailExpand").DetailCollapse("onDetailCollapse").DataBound("onDataBound"))
42+
)
43+
44+
<script type="text/kendo" id="OrdersTemplate">
45+
@(Html.Kendo().Grid<Person>()
46+
.Name("People#=ProductID#")
47+
.Columns(columns =>
48+
{
49+
columns.Bound(o => o.PersonID);
50+
columns.Bound(o => o.Name);
51+
columns.Bound(o => o.BirthDate).Format("{0:d}");
52+
53+
columns.Command(command =>
54+
{
55+
command.Edit();
56+
command.Destroy();
57+
});
58+
})
59+
.ToolBar(toolbar => toolbar.Create())
60+
.Editable(editable=>editable.Mode(GridEditMode.InLine))
61+
.Pageable().Sortable().Filterable()
62+
.DataSource(source => source.Ajax()
63+
.Model(model =>
64+
{
65+
model.Id(o => o.PersonID);
66+
model.Field(o => o.ProductID).DefaultValue(0);
67+
model.Field(o => o.PersonID).Editable(true);
68+
})
69+
.Create(create => create.Action("Create_People","Hierarchy_Persist_Expanded_Children"))
70+
.Read(read => read.Action("Read_People", "Hierarchy_Persist_Expanded_Children", new { productID = "#=ProductID#" }))
71+
.Update(update => update.Action("Update_People", "Hierarchy_Persist_Expanded_Children"))
72+
)
73+
.ToClientTemplate()
74+
)
75+
</script>
76+
<script>
77+
var expandedRows = new Set();
78+
function onDetailExpand(e) {
79+
console.log("detailExpand")
80+
var grid = e.sender;
81+
var dataItem = grid.dataItem(e.masterRow);
82+
expandedRows.add(dataItem);
83+
}
84+
function onDetailCollapse(e) {
85+
var grid = e.sender;
86+
var dataItem = grid.dataItem(e.masterRow);
87+
var idToRemove;
88+
expandedRows.forEach((item, idx) => {
89+
var modelId = item.idField;
90+
console.log(modelId);
91+
console.log(item[modelId], dataItem[modelId])
92+
if (item[modelId] == dataItem[modelId]) {
93+
expandedRows.delete(item)
94+
}
95+
})
96+
}
97+
function onEdit(e) {
98+
var grid = e.sender;
99+
expandedRows.forEach(item => {
100+
var row = $(`tr[data-uid=${item.uid}]`);
101+
grid.expandRow(row);
102+
})
103+
}
104+
function onDataBound(e) {
105+
var grid = $("#grid").data("kendoGrid");
106+
expandedRows.forEach(item => {
107+
var row = $(`tr[data-uid=${item.uid}]`);
108+
grid.expandRow(row);
109+
})
110+
}
111+
</script>

0 commit comments

Comments
 (0)