删除在kendo网格中检查的行

时间:2013-06-14 12:02:30

标签: grid kendo-ui

我有一个带文件名的kendo网格和复选框作为列。每行都有一个文件名和复选框。我想删除行,单击按钮检查这些行。

我在onclick函数中使用了以下代码。

$.each(grid.dataSource.view(), function () {
                var currentDataItem = grid.dataItem(grid.select());
                var dataRow = grid.dataSource.getByUid(currentDataItem.uid);
                grid.dataSource.remove(dataRow);

            });

但是,我得到一个javascript异常,如uid未定义。请帮我摆脱这个。

编辑:能够逐行删除。无法在单次删除中删除多行。 此外,当我在删除后再次使用kendo上传时,所有以前删除的文件都会一次性上传。

由于 Manikandan

2 个答案:

答案 0 :(得分:2)

/Iterate through all the tr in grid
$.each(grid.find('tr'), function (item,index) {
           //check if the tr has a checked checkbox, you can be more specific here if you have multiple checkboxes in tr.
           if(item.children('input[type=checkbox].is(':chekced'))
           { 
            grid.dataSource.remove(item);
            }
        });

我想分享的几件事情:

  1. 如果不循环遍历网格数据/视图/行,则无法一次删除多行
  2. 要删除任何行,您不需要挖掘数据源并获取dataItem,您可以根据' tr'直接删除它。 (DOM元素)
  3. 如果它说未定义Uid,请检查渲染网格的来源,它必须具有数据 - uid'归因于每个tr。如果没有,您还没有正确指定模态。
  4. 删除后是否仍然上传更改,您可以在网格数据源上调用saveChanges方法来冻结您所做的更改。

答案 1 :(得分:1)

三个问题:

如果您迭代grid.dataSource.view(),您将只找到网格当前页面中的那些元素。如果要遍历表格的所有元素,可以使用grid.dataSource.data()代替。

迭代您不需要select一行,因为您已经拥有了函数中的信息。例如,如果你这样做:

$.each(grid.dataSource.view(), function(idx, elem) {
    console.log("item with index " + idx + " is ", elem);
})

然后elem是行idx上的项目。

最后但并非最不重要的是,当您从头开始迭代数组时,您无法删除元素,因为您要删除两个连续元素,您将删除第一个元素,然后递增计数器以继续下一个元素然后第二个实际上现在位于第一个位置,因此将被跳过。

示例:如果您有以下代码:

var array = [3, 2, 1, 5, 6, 4];
console.log("before", array);
$.each(array, function(idx, elem) {
    if (elem >= 5) {
        array.splice(idx, 1);
    }
});
console.log("after", array);

它会显示:

before [3, 2, 1, 5, 6, 4] 
after [3, 2, 1, 6, 4] 

6的元素未被删除!!!

相反,你应该从最后开始:

var array = [3, 2, 1, 5, 6, 4];
console.log("before", array);
var len = array.length;
while (len--) {
    if (array[len] >= 5) {
        array.splice(len, 1);
    }
}
console.log("after", array);

得到结果:

before [3, 2, 1, 5, 6, 4] 
after [3, 2, 1, 4] 

所以,你的代码应该是:

var array = grid.dataSource.data();
var len = array.length;
while (len--) {
    if (...) { // the condition for checking if the item has the checkbox ticked
        grid.dataSource.remove(array[len]);
    }
}