剑道网格 - 获取当前编辑行

时间:2015-01-26 21:43:38

标签: javascript jquery angularjs kendo-grid kendo-datasource

即使未选中当前行,如何获取当前行?我有一个batch启用的Kendo网格navigatable。我的目标是使用dataItem.set()方法手动编辑列中的数据。但是,当您添加行时,它不会自动选中。因此,vm.testGrid.dataItem(vm.testGrid.select())不能使用。

vm.testGrid.dataSource.get(e.model.get("Id"))获取新添加的行,但如果在保存之前添加了多行,它将始终获得第一个添加的行(“Id”设置为自动递增并由数据库服务器自动生成,因此保存之前,所有新创建的行最初都为0。

vm.onEdit = function (e) {
    $('input.k-input.k-textbox').blur(function (f) {
        //var data = vm.testGrid.dataItem(vm.testGrid.select());
        var data = vm.testGrid.dataSource.get(e.model.get("Id")); // will always get the firstly added row
        data.set("LookupCol", "1000");
    }
});

有没有更好的解决方案来获取当前编辑的行?或者有更好的方法来编辑当前行吗?

3 个答案:

答案 0 :(得分:4)

以下内容将为您提供与当前单元格关联的数据项:

var dataItem = grid.dataItem(grid.current().closest("tr"));

// You can then set properties as you want.
dataItem.set("field1", "foo");
dataItem.set("field2", "bar");

答案 1 :(得分:2)

我使用了JQuery nearest()函数:

vm.onEdit = function (e) {
    $('input.k-input.k-textbox').blur(function (f) {
        var data = vm.testGrid.dataItem($(e.container).closest("tr"));
        data.set("LookupCol", "1000");
    }
});

答案 2 :(得分:0)

您还可以为网格编写扩展名,例如像这样

// extend the grid
kendo.ui.Grid.fn.getCurrentDataItem = function() {
  var that = this, current = that.current(), dataItem = null;        
  if (current) {
    dataItem = that.dataItem(current.closest('tr'));
  }        
  return dataItem;
}

JSFiddle example