or
@(Html.Kendo().Grid(Of KendoUIMvcApplication1.ViewModels.EmployeeViewModel).Name("Employees") _ .Columns(Sub(columns) columns.Bound(Function(e) e.FirstName).Width(140) columns.Bound(Function(e) e.LastName).Width(140) columns.Bound(Function(e) e.Title).Width(200) columns.Bound(Function(e) e.Country).Width(200) columns.Bound(Function(e) e.City) End Sub) _ .ClientDetailTemplateId("employeesTemplate") _ .Pageable() _ .DataSource(Sub(dataSource) dataSource.Ajax().Read(Sub(read) read.Action("HierarchyBinding_Employees", "Example") End Sub) dataSource.Ajax().PageSize(5) End Sub) _ .Sortable() _ .Events(Sub(events) events.DataBound("dataBound") End Sub))<script id="employeesTemplate" type="text/kendo-tmpl"> @(Html.Kendo().Grid(Of KendoUIMvcApplication1.ViewModels.OrderViewModel).Name("Orders_#=EmployeeID#") _ .Columns(Sub(columns) columns.Bound(Function(o) o.OrderID).Width(101) columns.Bound(Function(o) o.ShipCountry).Width(140) columns.Bound(Function(o) o.ShipAddress).Width(200) columns.Bound(Function(o) o.ShipName).Width(200) End Sub) _ .DataSource(Sub(dataSource) dataSource.Ajax().Read(Sub(read) read.Action("HierarchyBinding_Orders", "Example", New With {.employeeID = "#=EmployeeID#"}) End Sub) End Sub) _ .Pageable() _ .Sortable() _ .ToClientTemplate())</script><script> function dataBound() { this.expandRow(this.tbody.find("tr.k-master-row").first()); }</script>Imports System.Web.MvcImports System.LinqImports System.Data.LinqImports Kendo.Mvc.ExtensionsImports Kendo.Mvc.UIPublic Class ExampleController Inherits System.Web.Mvc.Controller Public Function Hierarchy() As ActionResult Return View() End Function Public Function HierarchyBinding_Employees(<DataSourceRequest> request As DataSourceRequest) As ActionResult Return Json(GetEmployees().ToDataSourceResult(request)) End Function Public Function HierarchyBinding_Orders(employeeID As Integer, <DataSourceRequest> request As DataSourceRequest) As ActionResult Return Json(GetOrders().Where(Function(order) order.EmployeeID = employeeID).ToDataSourceResult(request)) End Function Private Shared Function GetOrders() As IEnumerable(Of ViewModels.OrderViewModel) Dim northwind = New NorthwindDataContext() Dim loadOptions = New DataLoadOptions() loadOptions.LoadWith(Of Order)(Function(o) o.Customer) northwind.LoadOptions = loadOptions Return northwind.Orders.[Select](Function(order) New ViewModels.OrderViewModel() With { _ .ContactName = order.Customer.ContactName, _ .OrderDate = order.OrderDate, _ .OrderID = order.OrderID, _ .ShipAddress = order.ShipAddress, _ .ShipCountry = order.ShipCountry, _ .ShipName = order.ShipName, _ .EmployeeID = order.EmployeeID _ }) End Function Private Shared Function GetProducts() As IEnumerable(Of ViewModels.ProductViewModel) Dim northwind = New NorthwindDataContext() Return northwind.Products.[Select](Function(product) New ViewModels.ProductViewModel() With { _ .ProductID = product.ProductID, _ .ProductName = product.ProductName, _ .UnitPrice = If(product.UnitPrice, 0), _ .UnitsInStock = If(product.UnitsInStock, 0), _ .UnitsOnOrder = If(product.UnitsOnOrder, 0), _ .Discontinued = product.Discontinued, _ .LastSupply = DateTime.Today _ }) End Function Private Shared Function GetEmployees() As IEnumerable(Of ViewModels.EmployeeViewModel) Dim northwind = New NorthwindDataContext() Return northwind.Employees.[Select](Function(employee) New ViewModels.EmployeeViewModel() With { _ .EmployeeID = employee.EmployeeID, _ .FirstName = employee.FirstName, _ .LastName = employee.LastName, _ .Country = employee.Country, _ .City = employee.City, _ .Notes = employee.Notes, _ .Title = employee.Title, _ .Address = employee.Address, _ .HomePhone = employee.HomePhone _ }) End FunctionEnd Class"<div class="k-widget k-tabstrip k-header" id="Inty#=Id#"><ul class="k-reset k-tabstrip-items"><li class="k-item k-state-default"><a class="k-link" href="\#Inty#=Id#-1">Turtle</a></li></ul><div class="k-content" id="Inty#=Id#-1">Brownie</div></div><script><br><span class="Apple-tab-span" style="white-space:pre"> </span>jQuery(function(){jQuery("\#Inty#=Id#").kendoTabStrip({});});<br><\/script>"<script id="jobGridTemplate" type="text/kendo-tmpl">@(Html.Kendo().TabStrip().Name("Inty#=Id#").Items( items => items.Add().Text("Turtle").Content(@<text>Brownie</text>) ).ToClientTemplate())</script>@( Html.Kendo().Grid<JobGridViewModel>() .Name("Grid") .ClientDetailTemplateId("jobGridTemplate") .Columns(columns => { columns.Bound(p => p.Id).Hidden(); columns.Bound(p => p.Name).Width("15em").ClientTemplate(Html.ActionLink("#=Name#", "Edit", new {selectedjobid = "#=Id#"}).ToHtmlString()); columns.Bound(p => p.Number).Width("11em"); columns.Bound(p => p.Cost).Width("12em"); columns.Bound(p => p.Status).Template(@<text> @item.Status; </text>) .ClientTemplate("#= statusValues[Status] #") .EditorTemplateName("JobStatusEditor").Width("9em"); columns.Bound(p => p.Date).Width(130).Format("{0:d}").EditorTemplateName("Date"); columns.Bound(p => p.Commissions).Filterable(false).Template(@<text> @ListCommission(item, CommissionType.Sell) </text>).EditorTemplateName("ClientCommission").ClientTemplate("#= template(data.Commissions) #").Sortable(false); columns.Command(command => { command.Edit(); command.Destroy(); command.Custom("Duplicate").Text("Copy").SendDataKeys(true).SendState(true).Click("onGridCommand"); }).Width(280); }).ToolBar(y=> y.Template( @<text> <div> Job Name @(Html.Kendo().AutoComplete().Name("SearchName").DataSource(source => { source.Read(read => read.Action("_GetJobNamesLike", "Jobs" }) .Events(events => events.Change("onFilterChange"))) </div> <div> Job Number @(Html.Kendo().AutoComplete().Name("SearchNumber") .DataSource(binding => { binding.Read(read => read.Action("_GetJobNumbersLike", "Jobs")); }).Events(events => events.Change("onFilterChange"))) </div> @item.CustomCommandToolBarButton("NewJob", "New Job", "New", "Jobs", null) </text>)) .Editable(editable => editable.Mode(GridEditMode.InLine)) .Sortable() .Pageable(paging => paging.PageSizes(new int[]{20,40,60,80})) .Scrollable(config => config.Height(1000).Virtual(true)) .Resizable(resize => resize.Columns(true)) .Filterable() .DataSource( dataBinding => dataBinding.Ajax().Events(e => { e.RequestStart("onGridDataBinding"); // try Ajax().Data("sendData") return { foo: "bar" }; }).Model(model => model.Id(id => id.Id)) .Read(read=>read.Action("_SelectAjaxEditing", "Jobs", new {jobName="", jobNumber=""})) .Create(create => create.Action("_InsertAjaxEditing", "Jobs")) .Update(update => update.Action("_SaveAjaxEditing", "Jobs")) .Destroy(destroy=>destroy.Action("_DeleteAjaxEditing", "Jobs"))) .Events(events => { events.Change("onGridEdit").DataBound("onRowDataBound") .DetailExpand("onGridExpand") .DetailCollapse("onGridCollapse"); }))
I am eager to see this product in action but this small issue would be a show stopper for me for switching over the rest of my code base.<script type="text/x-kendo-tmpl" id="template"> <div class="process-view"> <div class="edit-buttons"> @(Html.ActionLink("Create New", "Process_Create", "Process", new { id=${ProcessID} })) </div> <dl> <dt>Code</dt> <dd>${ProcessCode}</dd> <dt>Name</dt> <dd>${Name}</dd> <dt>Description</dt> <dd>${Description}</dd> <dt>ID</dt> <dd>${ProcessID}</dd> </dl> </div></script>
[Required(ErrorMessageResourceName = "ValeurRequise", ErrorMessageResourceType = typeof(GlobalesResources))]public int NoFormation { get; set; } @(Html.Kendo().Grid<MesFormations.Models.Employe>() .Name("Grid") .Columns(columns => { columns.ForeignKey(p => p.NoFormation, (System.Collections.IEnumerable)ViewBag.Formations, "Numero", "Description").Title(@MesFormations.Views.Employe.Resources.Titre).Width(240); columns.Bound(p => p.DateFormation).Width(90).Format("{0:yyyy-MM-dd}").HtmlAttributes(new { style = "text-align:center" }); columns.Bound(p => p.Remarques).Width(230); columns.Command(command => command.Destroy()).Width(110); }) .ToolBar(toolbar => { toolbar.Create(); toolbar.Save(); }) .Editable(editable => editable.Mode(GridEditMode.InCell)) .Pageable() .Sortable() .Scrollable() .Resizable(resizing => resizing.Columns(true)) .DataSource(dataSource => dataSource .Ajax() .Batch(true) .ServerOperation(false) .Events(events => events.Error("error_handler")) .Events(events => events.Change("onEdit")) .Model(model => model.Id(p => p.NoFormationEmploye)) .Create("Editing_Create", "Employe", new { NoEmploye = Model.NoEmploye }) .Read("Editing_Read", "Employe", new { NoEmploye = Model.NoEmploye }) .Update("Editing_Update", "Employe") .Destroy("Editing_Destroy", "Employe") ))