Skip to content

Commit 0ba7e0f

Browse files
author
martin atanasov
committed
Enabled standard grid selection as well.
1 parent bb3c227 commit 0ba7e0f

File tree

2 files changed

+99
-56
lines changed

2 files changed

+99
-56
lines changed

grid/grid-selection-by-field/SelectionByField/Controllers/HomeController.cs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,14 +52,19 @@ public ActionResult Get_Products([DataSourceRequest] DataSourceRequest dsRequest
5252
return Json(result);
5353
}
5454

55-
public ActionResult Select_Product(Product product)
55+
public ActionResult Select_Products(List<Product> productsList)
5656
{
57-
var toUpdate = products.FirstOrDefault(p => p.ProductID == product.ProductID);
58-
toUpdate.Discontinued = product.Discontinued;
57+
foreach (Product product in productsList)
58+
{
59+
var toUpdate = products.FirstOrDefault(p => p.ProductID == product.ProductID);
60+
toUpdate.Discontinued = product.Discontinued;
61+
62+
}
5963
return Json(AreAllSelected());
64+
6065
}
6166

62-
public ActionResult Select_Products(bool checkAll)
67+
public ActionResult Select_AllProducts(bool checkAll)
6368
{
6469
foreach (var product in products)
6570
{
Lines changed: 90 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
@{
22
ViewBag.Title = "Home Page";
33
}
4-
54
@(Html.Kendo().Grid<SelectionPersistence.Models.Product>()
65
.Name("grid")
76
.Columns(columns =>
87
{
98
columns.Bound(p => p.ProductName);
10-
columns.Bound(p => p.UnitPrice).Width(120);
9+
columns.Bound(p => p.UnitPrice).Width(120).Format("{0:c}");
1110
columns.Bound(p => p.UnitsInStock).Width(120);
1211
columns.Bound(p => p.Discontinued)
1312
.ClientTemplate(@"# if (Discontinued) { #
@@ -17,9 +16,13 @@
1716
# } #")
1817
.HeaderTemplate("<input type='checkbox' class='checkAll' />").Width(120);
1918
})
19+
.Selectable(s => s.Mode(GridSelectionMode.Multiple))
2020
.Pageable()
2121
.Scrollable()
22-
.Events(ev=>ev.DataBound("dataBound"))
22+
.Events(ev => ev
23+
.DataBound("dataBound")
24+
.Change("changed")
25+
)
2326
.HtmlAttributes(new { style = "height:550px;" })
2427
.DataSource(dataSource => dataSource
2528
.Ajax()
@@ -28,72 +31,107 @@
2831
.Read(read => read.Action("Get_Products", "Home"))
2932
)
3033
)
31-
34+
<div id="count"></div>
3235
<script>
33-
var allChecked = @Html.Raw(Json.Encode(Model));
36+
var allChecked = @Html.Raw(Json.Encode(Model)),
37+
bound = false;
38+
function changed(e)
39+
{
40+
if(!bound)
41+
{
42+
var grid = e.sender,
43+
selected = grid.select(),
44+
data= {productsList : []}
45+
46+
selected.each(function(){
47+
var dataItem = grid.dataItem(this),
48+
checked = $(this).find("input:checkbox").prop("checked");
49+
50+
data.productsList.push({
51+
ProductId: dataItem.ProductID,
52+
ProductName: dataItem.ProductName,
53+
UnitPrice: dataItem.UnitPrice,
54+
UnitsInStock: dataItem.UnitsInStock,
55+
Discontinued: !checked
56+
})
57+
});
58+
59+
updateData(grid, data);
60+
}
61+
62+
}
3463
3564
function dataBound(e) {
65+
bound = true;
3666
var rows = this.tbody.find("tr");
67+
var grid = e.sender;
3768
rows.each(function () {
3869
var row = $(this);
3970
if (row.find("input[checked='checked']").length > 0) {
40-
row.addClass("k-state-selected");
71+
grid.select(row);
4172
}
4273
});
74+
bound = false;
4375
}
4476
45-
function checkHeader() {
46-
if (allChecked) {
47-
$(".checkAll").prop("checked", "checked");
77+
function updateData(grid, data){
78+
$.ajax({
79+
url: '@Url.Action("Select_Products", "Home")',
80+
data: data,
81+
type: "POST",
82+
success: function (res) {
83+
checkHeader(res);
84+
grid.dataSource.fetch();
85+
}
86+
});
87+
}
88+
89+
function checkHeader(res) {
90+
if(res)
91+
{
92+
grid.thead.find(".checkAll").prop('checked', 'checked');
93+
}
94+
else
95+
{
96+
grid.thead.find(".checkAll").removeProp("checked");
4897
}
4998
}
5099
51-
$(document).ready(function () {
52-
var grid = $("#grid").data("kendoGrid");
53-
grid.table.on("click", ".checkbox", selectRow);
54-
grid.thead.on("click", ".checkAll", selectAll);
100+
function selectRow() {
101+
var checked = this.checked,
102+
row = $(this).closest("tr"),
103+
dataItem = grid.dataItem(row);
55104
56-
function selectRow() {
57-
var checked = this.checked,
58-
row = $(this).closest("tr"),
59-
grid = $("#grid").data("kendoGrid"),
60-
dataItem = grid.dataItem(row);
105+
var data = {productsList:[{
106+
ProductId: dataItem.ProductID,
107+
ProductName: dataItem.ProductName,
108+
UnitPrice: dataItem.UnitPrice,
109+
UnitsInStock: dataItem.UnitsInStock,
110+
Discontinued: checked}]
111+
};
61112
62-
$.ajax({
63-
url: '@Url.Action("Select_Product", "Home")',
64-
data: {
65-
ProductId: dataItem.ProductID,
66-
ProductName: dataItem.ProductName,
67-
UnitPrice: dataItem.UnitPrice,
68-
UnitsInStock: dataItem.UnitsInStock,
69-
Discontinued: checked
70-
},
71-
type: "POST",
72-
success: function (selectAll) {
73-
if (selectAll) {
74-
grid.thead.find(".checkAll").prop("checked", "checked");
75-
} else {
76-
grid.thead.find(".checkAll").removeProp("checked");
77-
}
78-
grid.dataSource.fetch();
79-
}
80-
});
81-
}
113+
updateData(grid, data);
114+
}
82115
83-
function selectAll() {
84-
var checked = this.checked;
85-
$.ajax({
86-
url: '@Url.Action("Select_Products", "Home")',
87-
data: {
88-
checkAll:checked
89-
},
90-
type: "POST",
91-
success: function () {
92-
grid.dataSource.fetch();
93-
}
94-
});
95-
}
116+
function selectAll() {
117+
var checked = this.checked;
118+
$.ajax({
119+
url: '@Url.Action("Select_AllProducts", "Home")',
120+
data: {
121+
checkAll:checked
122+
},
123+
type: "POST",
124+
success: function () {
125+
grid.dataSource.fetch();
126+
}
127+
});
128+
}
129+
130+
$(document).ready(function () {
131+
grid = $("#grid").data("kendoGrid");
132+
grid.table.on("click", ".checkbox", selectRow);
133+
grid.thead.on("click", ".checkAll", selectAll);
96134
97-
checkHeader();
135+
checkHeader(allChecked);
98136
});
99137
</script>

0 commit comments

Comments
 (0)