or
@(Html.Kendo().Grid<
ProductViewModel
>()
.Name("productsGrid")
.Columns(columns =>
{
columns.Bound(p => p.ProductName)
.ClientFooterTemplate("Total Count: #=count#")
.ClientGroupFooterTemplate("Count: #=count#");
columns.Bound(p => p.UnitPrice).Format("{0:C}")
.ClientFooterTemplate("<
div
>Sum: #= sum #</
div
>")
.ClientGroupFooterTemplate("<
div
>Sum: #= sum #</
div
>");
columns.Bound(p => p.UnitsOnOrder)
.ClientFooterTemplate("Average: #=average#")
.ClientGroupFooterTemplate("Average: #=average#");
columns.Bound(p => p.UnitsInStock)
.ClientGroupHeaderTemplate("Units In Stock: #= value # (Count: #= count#)")
.ClientFooterTemplate("<
div
>Min: #= min #</
div
><
div
>Max: #= max #</
div
>");
})
.DataSource(dataSource => dataSource
.Ajax()
.Aggregates(aggregates =>
{
aggregates.Add(p => p.UnitsInStock).Min().Max().Count();
aggregates.Add(p => p.UnitsOnOrder).Average();
aggregates.Add(p => p.ProductName).Count();
aggregates.Add(p => p.UnitPrice).Sum();
})
.Group(groups => groups.Add(p => p.Category))
.Read(read => read.Action("Products", "Home"))
)
public
ActionResult Products([DataSourceRequest] DataSourceRequest request)
{
return
Json(GetProducts().ToDataSourceResult(request));
}
private
IEnumerable<ProductViewModel> GetProducts()
{
var products =
new
List<ProductViewModel>();
products.Add(
new
ProductViewModel() { Category =
"Food"
, ProductName =
"Pasta"
, UnitPrice = 39.00m, UnitsInStock = 1, UnitsOnOrder = 5 });
products.Add(
new
ProductViewModel() { Category =
"Food"
, ProductName =
"Salami"
, UnitPrice = 21.00m, UnitsInStock = 2, UnitsOnOrder = 3 });
products.Add(
new
ProductViewModel() { Category =
"Food"
, ProductName =
"Bratwurst"
, UnitPrice = 39.00m, UnitsInStock = 2, UnitsOnOrder = 7 });
return
products.AsEnumerable();
}
@model IEnumerable<
ProductViewModel
>
@(Html.Kendo().Grid(Model)
.Name("productsGrid")
.Columns(columns =>
{
columns.Bound(p => p.ProductName)
.ClientFooterTemplate("Total Count: #=count#")
.ClientGroupFooterTemplate("Count: #=count#");
columns.Bound(p => p.UnitPrice).Format("{0:C}")
.ClientFooterTemplate("<
div
>Sum: #= sum #</
div
>")
.ClientGroupFooterTemplate("<
div
>Sum: #= sum #</
div
>");
columns.Bound(p => p.UnitsOnOrder)
.ClientFooterTemplate("Average: #=average#")
.ClientGroupFooterTemplate("Average: #=average#");
columns.Bound(p => p.UnitsInStock)
.ClientGroupHeaderTemplate("Units In Stock: #= value # (Count: #= count#)")
.ClientFooterTemplate("<
div
>Min: #= min #</
div
><
div
>Max: #= max #</
div
>");
})
.DataSource(dataSource => dataSource
.Server()
.Aggregates(aggregates =>
{
aggregates.Add(p => p.UnitsInStock).Min().Max().Count();
aggregates.Add(p => p.UnitsOnOrder).Average();
aggregates.Add(p => p.ProductName).Count();
aggregates.Add(p => p.UnitPrice).Sum();
})
.Group(groups => groups.Add(p => p.Category))
)
groupable: true
('#div_widget').kendoWindow ({
actions: ["Refresh", "Maximize", "Minimize"],
height : get_widget_setting (id_widget, "height", "300px"),
width : get_widget_setting (id_widget, "width", "600px"),
minWidth: 600,
minHeight: 260,
title : w.label,
iframe : true,
content: w.href,
resize : function(e){
var widget = e.sender.element.data("kendoWindow");
var is_maximized = widget.options.isMaximized; // Is this a dirty hack? Are there another ways?
if (is_maximized) {
set_global_setting ("maximized_widget", id_widget);
return;
}
var wrapper = widget.wrapper;
save_widget_setting(id_widget, "height", wrapper.css("height"));
save_widget_setting(id_widget, "width", wrapper.css("width"));
},
dragend : function (e) {
var position = e.sender.element.data("kendoWindow").wrapper.offset();
save_widget_setting(id_widget, "top", position.top + "px");
save_widget_setting(id_widget, "left", position.left + "px");
}
})