Grid 删除剑道网格中选中的行

Grid 删除剑道网格中选中的行,grid,kendo-ui,Grid,Kendo Ui,我有一个剑道网格,文件名和复选框作为列。每行都有一个文件名和复选框。我想删除行,单击按钮即可选中这些行 我在onclick函数中使用了以下代码 $.each(grid.dataSource.view(), function () { var currentDataItem = grid.dataItem(grid.select()); var dataRow = grid.dataSource.getByUid(currentDat

我有一个剑道网格,文件名和复选框作为列。每行都有一个文件名和复选框。我想删除行,单击按钮即可选中这些行

我在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未定义。请帮我摆脱这一切

编辑:可以逐行删除。无法在单个快照中删除多行。 另外,当我在删除后再次使用剑道上传上传时,之前删除的所有文件都会在一次尝试中上传

谢谢 马尼坎丹

三个问题:

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

迭代不需要选择行,因为函数中已经有了信息。例如,如果您这样做:

$.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]);
    }
}
我想分享的几件事:

如果不在网格数据/视图/行之间循环,则不能一次删除多行 要删除任何行,您不需要挖掘datasource并获取dataItem,您可以基于“tr”DOM元素直接删除它 如果它说Uid未定义,请检查渲染网格的源,它必须将“数据Uid”属性附加到每个tr。否则,您没有正确指定模式。 删除后,如果它仍然上载更改,则可以在网格数据源上调用saveChanges方法来冻结所做的更改。
我能够找出找到复选框的条件。我尝试了如果$GridUploadStatffids1.findinput:被选中,但是这对于所有行都是正确的。现在如何继续?我需要查看您的代码以查看错误,但是在确保从末尾删除行时会遇到问题。为什么不循环数据源元素?因为这是纯JavaScript,不需要jQuery,所以速度可能快得多!这是删除选中行的代码部分。var grid=$'GridUploadStatffids1'.datakendoGrid;var数组=grid.dataSource.data;var len=array.length;而len-{if$GridUploadstaffIDs1.find'input:checked'{grid.dataSource.removearray[len];}}}对不起,您的模型中的checked字段不是吗?为什么要使用jQuery来获取它,而不是使用复选框后面的变量呢?请您清楚地解释一下,以找到解决方案?
/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);
            }
        });