This question is locked. New answers and comments are not allowed.
Hello,
I have cascading dropdowns in my hierarchical grid (child rows) working fine. What I need is when the last dropdown value is selected that it would call my function (which it is doing fine), pass the id, look up the suggested price for the Price column and update the grid.
Here is what I have so far:
My child grid template:
<script id="orderdetailtemplate" type="text/kendo-tmpl">
@(Html.Kendo().Grid<Trecero.Models.OrderDetail>()
.Name("grid_#=OrderId#")
.HtmlAttributes(new {@class="MyDetails" })
.Columns(columns =>
{
columns.Bound(o => o.OrderDetailId).Width(100).Title("Id");
columns.Bound(o => o.DateOrder).Width(75).Title("Date").Width(130).Format("{0:MM/dd/yyyy}");
columns.ForeignKey(p => p.CompanyId, (System.Collections.IEnumerable)ViewData["companies"], "CompanyId", "CompanyName").Title("Company").Width(100).HeaderHtmlAttributes(new { @title = "Company" }).Width(200).EditorTemplateName("CompanyId");
columns.ForeignKey(p => p.OrderItemId, (System.Collections.IEnumerable)ViewData["orderitems"], "OrderItemId", "ItemCode").Title("Item").Width(300).HeaderHtmlAttributes(new { @title = "Item" }).Width(300).EditorTemplateName("OrderItem");
columns.Bound(o => o.Price).Width(110);
columns.Bound(o => o.OrderItem).ClientTemplate("#=OrderItem.Price#").Width(100);
columns.Bound(o => o.Qty).Width(80);
columns.ForeignKey(p => p.OrderStatusId, (System.Collections.IEnumerable)ViewData["orderstatus"], "OrderStatusId", "Description").Title("Status").Width(150);
columns.Command(command => { command.Edit(); }).Width(150);
})
.ToolBar(toolbar => toolbar.Create().Text("Add Line").HtmlAttributes(new { @title = "Add Line" }))
.Editable(editable => editable.Mode(GridEditMode.InLine))
.DataSource(dataSource => dataSource
.Ajax()
.PageSize(10)
.Model(model =>
{
model.Id(p => p.OrderDetailId);
model.Field(p => p.EnteredByUserId).DefaultValue(ViewBag.CurrentUserId);
model.Field(p => p.IsPosted).DefaultValue(false);
model.Field(p => p.OrderId).Editable(false);
model.Field(p => p.OrderDetailId).Editable(false);
model.Field(p => p.DateOrder).DefaultValue(DateTime.Today).Editable(false);
model.Field(p => p.Qty).DefaultValue(1);
model.Field(p => p.OrderStatusId).DefaultValue(1);
model.Field(p => p.Description).Editable(false);
})
.Read(read => read.Action("OrderDetail_Read", "Orders", new { id = "#=OrderId#" }))
.Create(update => update.Action("OrderDetail_Create", "Orders"))
.Update(update => update.Action("OrderDetail_Update", "Orders"))
.Destroy(update => update.Action("OrderDetail_Destroy", "Orders"))
)
.Pageable()
.Sortable()
.ToClientTemplate()
)
</script>
My editor template drop down that is doing the triggering:
@model int
@(Html.Kendo().DropDownListFor(m => m)
.AutoBind(false)
.OptionLabel("Select Item...")
.DataTextField("TextValue")
.DataValueField("Id")
.Events(e => e.Change("orderitemchanged"))
.DataSource(dataSource =>
{
dataSource.Read(read => read.Action("GetOrderItemListbyCompanyId", "Orders").Data("filterCompanies"))
.ServerFiltering(true);
})
.CascadeFrom("CompanyId")
)
@Html.ValidationMessageFor(m => m)
and finally the event where I need this magic to happen:
function orderitemchanged(e) {
var tr = $(e.target).closest(".k-detail-row").closest('div.k-grid').data("kendoGrid");
alert(tr);
//alert(data);
//var grid = $("#grid").data("kendoGrid"),
//model = grid.dataItem(this.element.closest("tr"));
//alert(model);
//var x = e.dataItem['Price'].text;
//alert(x);
//var t = $("#OrderItemId").data("kendoDropDownList").value();
//var items = this.dataSource.data();
//for (var i = 0; i < items.length; i++) {
// alert('hit');
// //alert(items[i].value);
// items[i].set("Price", 100);
//}
//var x = $("#Price").data("kendoTextbox").text();
//alert(x);
//var tr = $(e.target).closest("tr"); //get the row
//var data = this.dataItem(tr); //get the row data so it can be referred later
//alert(data);
//data.set("UnitPrice", data.UnitPrice * 10);
}
As you can see, I've tried everything.
I have cascading dropdowns in my hierarchical grid (child rows) working fine. What I need is when the last dropdown value is selected that it would call my function (which it is doing fine), pass the id, look up the suggested price for the Price column and update the grid.
Here is what I have so far:
My child grid template:
<script id="orderdetailtemplate" type="text/kendo-tmpl">
@(Html.Kendo().Grid<Trecero.Models.OrderDetail>()
.Name("grid_#=OrderId#")
.HtmlAttributes(new {@class="MyDetails" })
.Columns(columns =>
{
columns.Bound(o => o.OrderDetailId).Width(100).Title("Id");
columns.Bound(o => o.DateOrder).Width(75).Title("Date").Width(130).Format("{0:MM/dd/yyyy}");
columns.ForeignKey(p => p.CompanyId, (System.Collections.IEnumerable)ViewData["companies"], "CompanyId", "CompanyName").Title("Company").Width(100).HeaderHtmlAttributes(new { @title = "Company" }).Width(200).EditorTemplateName("CompanyId");
columns.ForeignKey(p => p.OrderItemId, (System.Collections.IEnumerable)ViewData["orderitems"], "OrderItemId", "ItemCode").Title("Item").Width(300).HeaderHtmlAttributes(new { @title = "Item" }).Width(300).EditorTemplateName("OrderItem");
columns.Bound(o => o.Price).Width(110);
columns.Bound(o => o.OrderItem).ClientTemplate("#=OrderItem.Price#").Width(100);
columns.Bound(o => o.Qty).Width(80);
columns.ForeignKey(p => p.OrderStatusId, (System.Collections.IEnumerable)ViewData["orderstatus"], "OrderStatusId", "Description").Title("Status").Width(150);
columns.Command(command => { command.Edit(); }).Width(150);
})
.ToolBar(toolbar => toolbar.Create().Text("Add Line").HtmlAttributes(new { @title = "Add Line" }))
.Editable(editable => editable.Mode(GridEditMode.InLine))
.DataSource(dataSource => dataSource
.Ajax()
.PageSize(10)
.Model(model =>
{
model.Id(p => p.OrderDetailId);
model.Field(p => p.EnteredByUserId).DefaultValue(ViewBag.CurrentUserId);
model.Field(p => p.IsPosted).DefaultValue(false);
model.Field(p => p.OrderId).Editable(false);
model.Field(p => p.OrderDetailId).Editable(false);
model.Field(p => p.DateOrder).DefaultValue(DateTime.Today).Editable(false);
model.Field(p => p.Qty).DefaultValue(1);
model.Field(p => p.OrderStatusId).DefaultValue(1);
model.Field(p => p.Description).Editable(false);
})
.Read(read => read.Action("OrderDetail_Read", "Orders", new { id = "#=OrderId#" }))
.Create(update => update.Action("OrderDetail_Create", "Orders"))
.Update(update => update.Action("OrderDetail_Update", "Orders"))
.Destroy(update => update.Action("OrderDetail_Destroy", "Orders"))
)
.Pageable()
.Sortable()
.ToClientTemplate()
)
</script>
My editor template drop down that is doing the triggering:
@model int
@(Html.Kendo().DropDownListFor(m => m)
.AutoBind(false)
.OptionLabel("Select Item...")
.DataTextField("TextValue")
.DataValueField("Id")
.Events(e => e.Change("orderitemchanged"))
.DataSource(dataSource =>
{
dataSource.Read(read => read.Action("GetOrderItemListbyCompanyId", "Orders").Data("filterCompanies"))
.ServerFiltering(true);
})
.CascadeFrom("CompanyId")
)
@Html.ValidationMessageFor(m => m)
and finally the event where I need this magic to happen:
function orderitemchanged(e) {
var tr = $(e.target).closest(".k-detail-row").closest('div.k-grid').data("kendoGrid");
alert(tr);
//alert(data);
//var grid = $("#grid").data("kendoGrid"),
//model = grid.dataItem(this.element.closest("tr"));
//alert(model);
//var x = e.dataItem['Price'].text;
//alert(x);
//var t = $("#OrderItemId").data("kendoDropDownList").value();
//var items = this.dataSource.data();
//for (var i = 0; i < items.length; i++) {
// alert('hit');
// //alert(items[i].value);
// items[i].set("Price", 100);
//}
//var x = $("#Price").data("kendoTextbox").text();
//alert(x);
//var tr = $(e.target).closest("tr"); //get the row
//var data = this.dataItem(tr); //get the row data so it can be referred later
//alert(data);
//data.set("UnitPrice", data.UnitPrice * 10);
}
As you can see, I've tried everything.