【问题标题】:How to get index of selected row in kendo grid如何在剑道网格中获取选定行的索引
【发布时间】:2019-11-13 22:52:18
【问题描述】:

我想获取剑道网格中选定行的索引。下面的代码根据当前页面返回行的索引。它不服从网格的页码和页面大小。
因此,如果网格的页面大小为 50,则您在第 2 页,然后单击第 5 行,则索引应为 54,因为您单击了第 55 行。

以下两个选项都不起作用

选项 1

grid.on('click', '.t-doc', function (e) {
        var kendoGrid = $("#grid").getKendoGrid();
        var row = $(e.target).closest("tr");        
        var index = $("tr", kendoGrid.tbody).index(row);
}

选项 2

grid.on('click', '.t-doc', function (e) {
        var kendoGrid = $("#grid").getKendoGrid();
        var ds = kendoGrid.dataSource;
        var dataItem = kendoGrid.dataItem($(e.target).closest("tr"));
        var index = ds.indexOf(dataItem);

【问题讨论】:

  • 另一种选择:var selectedItem = grid.dataItem(grid.select());

标签: kendo-ui kendo-grid kendo-asp.net-mvc


【解决方案1】:

这就是我所做的。希望有更好的选择

grid.on('click', '.t-doc', function (e) {
        var kendoGrid = $("#grid").getKendoGrid();
        var ds = kendoGrid.dataSource;
        var dataItem = kendoGrid.dataItem($(e.target).closest("tr"));
        var index = ((ds.page() - 1) * ds.pageSize()) + ds.indexOf(dataItem);
}

【讨论】:

  • 我会这样做,但我会使用 change 事件,它只会在选择更改而不是每次点击时触发。
【解决方案2】:

就我的研究而言,没有办法一举获得与您的数据列表相关的选定索引。然而,这是一个indexOf 方法来完成此操作,它适用于多个页面。请注意,您首先必须找到选定的行作为数据项。这类似于您的第二种方法,但是我也使用grid.select() 方法来获取所选元素,而不是父行。代码如下所示:

function () {
  // Get the grid element
  var grid = $('#grid').data('kendoGrid');

  // Get the selected row as a dataItem
  var dataItem = grid.dataItem(grid.select());

  // Compute the index of the dataItem
  var index = grid.dataSource.indexOf(dataItem);

  // Do whatever you need with the index
}

一行一行,这并没有那么短,但是它使您不必手动计算索引,这感觉有点干净。这适用于自动分配的 guid 值,因此它应该适用于您的用户稍后添加的行。另外,请注意,当没有选定索引时,索引将为-1,并且在分页时会重置选定索引。希望对您有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-09
    • 2013-06-24
    • 1970-01-01
    • 1970-01-01
    • 2014-01-29
    • 1970-01-01
    • 1970-01-01
    • 2013-07-14
    相关资源
    最近更新 更多