0

我有一个带有详细模板的剑道网格,网格内有一个网格,我希望每次只选择一行。例如,如果选择了一行并展开它,显示内部网格,然后我从内部网格中选择一行,外部网格中的行始终保持选中状态。现在我在网格中有两个选定的行,一个在外部网格(主行)中选择,另一个在内部网格中选择。

我可以抓住一些模仿“OnLeave”事件的事件吗?

我一直在浏览 Kendo 文档,我唯一能想到的就是尝试在 Change-event 中获取一些东西。但是,我无法找到如何清除两个网格中的所有选择而不清除我最后单击的选定行(在内部或外部网格中)。

无论如何,在这个愚蠢的问题上,任何帮助都会得到很好的评价:)

我的观点

    @(Html.Kendo().Grid<SomeModel>()
  .Name("SomeGrid")
  .Columns(c =>
      {
          // some columns (abbreviated)
      })
  .Selectable(s => s.Enabled(true).Mode(GridSelectionMode.Single).Type(GridSelectionType.Row))
  .ClientDetailTemplateId("someTemp")
  .Events(events => events.DataBound("dataBound").Change("onSomeGridChange"))
  .DataSource(d => d.Ajax().Model(model => model.Id(p => p.SomeId)))
  )  

<script id="someTemp" type="text/kendo-tmpl">
@(Html.Kendo().Grid<SomeObject>()
  .Name("grid_#=SomeId#")
  .Columns(c =>
      {
          // some columns (abbreviated)
      })
  .Selectable(s => s.Enabled(true).Mode(GridSelectionMode.Single).Type(GridSelectionType.Row))
  .Events(events => events.Change("onSomeGridChange"))
  .DataSource(dataSource => dataSource
                                .Ajax()
                                .Read(read => read.Action("GetSomeData", "Controller", new { blNumber = "#=SomeId#" })))
  .ToClientTemplate()
  ) 

然后我的脚本:

function onDerpChange(e) {
e.preventDefault();

var fff = e.sender;

// How could I clearselection on all other rows than the one I selected last?

var selectedRows = this.select();
var selectedDataItems = [];
for (var j = 0; j < selectedRows.length; j++) {
    var ddataItem = this.dataItem(selectedRows[j]);
    selectedDataItems.push(ddataItem);
}
}
4

1 回答 1

4

您可以将所有这些网格(外部和内部网格)的“选择”事件处理程序附加到单个事件,以清除所有其他选定的行。

事件处理程序应如下所示:

function onRowSelect(){
     var currentlySelected = this.select();
     $('.k-grid tbody>.k-state-selected').not(currentlySelected).removeClass('k-state-selected')
}
于 2013-11-01T22:37:08.983 回答