Kendo网格更改事件每行选择仅触发一次

时间:2014-07-28 14:15:07

标签: javascript jquery asp.net-mvc-4 kendo-ui kendo-grid

在一个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;
    ...
}

这很好用。问题是,每次选择不同的行时都会触发该事件,但如果我选择了之前选择的行,则不会触发该事件,也无法获取该行的代码。

任何帮助?

2 个答案:

答案 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"))