/ / Como remover uma linha de grade do kendo ui com base em um valor de coluna - javascript, asp.net-mvc, kendo-ui, kendo-grid

Como remover uma linha de grade do kendo ui com base em um valor de coluna - javascript, asp.net-mvc, kendo-ui, kendo-grid

Em um asp.net mvc view, eu tenho um treeview de interface do usuário do Kendo e uma grade de interface do usuário do Kendo. Cada caixa de seleção na treeview tem o mesmo valor de id na coluna ID da grade. Sempre que eu desmarcar uma caixa de seleção no treeview eu quero excluir a linha correspondente na grade que tem esse valor id. ID é uma das colunas na grade. O seguinte é meu código:

A seguinte função é executada pela ação desmarcar no treeview

function onCheck() {
var checkedNodes = [],
treeView = $("#treeview").data("kendoTreeView"),

var myNodes = treeView.dataSource.view();

for (var i = 0; i < myNodes.length; i++) {
var children = myNodes[i].children.view();
if (children) {
for (var j = 0; j < children.length; j++) {

if ((typeof children[j].checked !== undefined)  && (!children[j].checked)) {
alert("You unchecked " + children[j].id); //This shows the correct id value
var dataItem = $("#grid").data("kendoGrid").dataSource.get(children[j].id);
$("#grid").data("kendoGrid").dataSource.remove(dataItem);
}
}
}
}

A seguir, o código da grade:

      $("#grid").kendoGrid({
pageable:true,
dataSource: dataSource, //comes as json from a url
schema: {
model: {
id: "ID"
}
},
pageSize:3,


columns: [
{
hidden: true,
field: "ID"

},
{
field: "MyFileName"
},
});

Quando depurei, o dataItem em var dataItem =$ ("# grid"). data ("kendoGrid"). dataSource.get (filhos [j] .id); vem como indefinido. No entanto, o id que a treeview recuperou e o id na grade correspondeu. Este é o erro que eu vejo: 0x800a138f - erro de runtime JavaScript: não é possível obter a propriedade "uid" de referência indefinida ou nula

Obviamente, nenhuma linha de grade é excluída.

obrigado

Respostas:

1 para resposta № 1

Tente isso no evento de mudança da sua caixa de seleção:

var id = treeView.dataItem(this.closest("li")).id;
var gridDataItem = grid.dataSource.data().filter(function(item) {
return item.id == id;
})[0];

grid.removeRow("tr[data-uid="" + gridDataItem.uid + ""]");

o filter método irá encontrar a linha relacionada na grade pelo atual id. Use a grade "s removeRow() insted de remover diretamente do dataSource.

Demonstração