ASP.NET MVC Kendo Grid下拉框联动更新单元格值问题求助
解决ASP.NET MVC Kendo Grid中Exception选择"No"时清空ExceptionType的问题
问题根源
原代码存在几个关键问题导致功能失效:
- 直接通过
$("#Exception")获取下拉框,在InCell编辑模式下,编辑器是动态生成的,每个行的编辑器会带有行标识后缀,无法准确定位当前编辑的下拉框。 - 修改
currentItem["ExceptionType"]=""后,未触发数据源的变更通知,也没有刷新单元格的UI显示,Batch模式下数据项的直接修改不会自动同步到界面。 - 依赖
grid.select()获取当前行不可靠,InCell编辑时当前行应该从编辑器所在的DOM元素定位。
修正后的实现代码
1. 更新assignExceptionValue JavaScript函数
assignExceptionValue: function (e) { // 获取当前触发事件的下拉框 var dropdown = e.sender; // 获取当前编辑的行 var currentRow = dropdown.element.closest("tr"); var grid = $("#gridIssExcpListQueryResult").data("kendoGrid"); var currentItem = grid.dataItem(currentRow); if (!currentItem) return; var selectedVal = dropdown.value(); if (selectedVal === "N") { // 使用数据源的set方法更新字段,触发变更通知 currentItem.set("ExceptionType", ""); // 刷新ExceptionType单元格的UI,确保显示清空后的值 grid.refreshRow(currentRow); } }
2. 确认编辑器模板的事件绑定
Exception的编辑器模板无需额外修改,确保Change事件绑定正确即可:
@model string @(Html.Kendo().DropDownList() .Name("Exception") .HtmlAttributes(new { style = "width:100px;" }) .DataTextField("Text") .DataValueField("Value") .BindTo(new List<PccNet.Infra.Common.ListItem>() { new PccNet.Infra.Common.ListItem(){ Text="Yes", Value="Y" }, new PccNet.Infra.Common.ListItem(){ Text="No", Value="N" } }) .Events(a => a.Change("PccNet.eDOC.BlException.Ux.assignExceptionValue")) )
关键说明
- 使用
e.sender获取当前编辑的下拉框,避免DOM选择器的定位错误。 - 调用
currentItem.set("ExceptionType", "")而非直接赋值,这会触发Kendo数据源的change事件,确保数据变更被框架追踪(尤其在Batch模式下)。 - 调用
grid.refreshRow(currentRow)强制刷新当前行,确保ExceptionType单元格立即显示清空后的状态。
内容的提问来源于stack exchange,提问作者Amitabha Chakraborty
相关产品推荐
相关产品推荐

