在一个MVC4项目中,我有一个剑道网格,当选择一行时会触发一个事件。
<div id="datagrid">
@(Html.Kendo().Grid<SustIMS.Models.StretchModel>()
.Name("datagrid_Stretches")
.Columns(columns =>
{
columns.Bound(s => s.StretchCode).Title(ViewBag.lblCode).Width(80);
columns.Bound(s => s.StretchMediumDescription).Title(ViewBag.lblDescription);
...
})
.Events(e => e.Change("onChange")) <--------- here's the event
.DataSource(dataSource => dataSource
.Ajax()
.PageSize(15)
.Read(read => read.Action("GetStretches", "MasterData"))
)
)
</div>
因此,当我选择一行时,会调用onChange
函数:
function onChange() {
var code = this.dataItem(this.select()).StretchCode;
$.get('@Url.Content("getStretchCode")',
{ "code": code });
}
在我的控制器中,检索代码并使用它完成一些操作。
public void getStretchCode(string code)
{
currentStretch.RoadComponentCode = code;
...
}
这很好用。问题是,每次选择不同的行时都会触发该事件,但如果我选择了之前选择的行,则不会触发该事件,也无法获取该行的代码。
任何帮助?
答案 0 :(得分:2)
在网格中添加.Selectable()
,以便您可以选择之前的行。
@(Html.Kendo().Grid<SustIMS.Models.StretchModel>()
.Name("datagrid_Stretches")
.Columns(columns =>
{
columns.Bound(s => s.StretchCode).Title(ViewBag.lblCode).Width(80);
columns.Bound(s => s.StretchMediumDescription).Title(ViewBag.lblDescription);
...
})
.Selectable(selectable => selectable
.Type(GridSelectionType.Row) <--------- Add This
)
.Events(e => e.Change("onChange"))
.DataSource(dataSource => dataSource
.Ajax()
.PageSize(15)
.Read(read => read.Action("GetStretches", "MasterData"))
)
)
<强>脚本强>
function onChange() {
var code = this.dataItem(this.select()).StretchCode;
$.post('@Url.Content("getStretchCode")',
{ "code": code });
}
答案 1 :(得分:2)
你应该在添加像这样的事件之前添加Selectable()
.Selectable(selectable => selectable
.Mode(GridSelectionMode.Multiple)
.Type(GridSelectionType.Cell))
.Events(e => e.Change("onChange"))