2016-03-09 106 views
0

在asp.net mvc页面上,我有Kendo UI网格和Kendo UI树视图。树视图有复选框,树视图有两层数据。然后,一旦网格被填充,我想循环遍历行,找到相应的id,然后循环遍历树视图并找到具有相同id的节点并进行检查。以下是我的代码:如何检查基于kendo ui网格数据的kendo ui treeview子节点

电网代码:

dataBound: function() { 
     var rows = this.tbody.children(); 
     var dataItems = this.dataSource.view(); 
     for (var i = 0; i < dataItems.length; i++) { 
      kendo.bind(rows[i], dataItems[i]);     
      bindCheckboxToId(dataItems[i].ID); 
     } 
    } 

JavaScript函数来设置TreeView节点进行检查:

function bindCheckboxToId(id) { 
    var treeView = $("#treeview").data("kendoTreeView"); 
    var myNodes = treeView.dataSource.view(); 
    for (var i = 0; i < myNodes.length; i++) { 
     var children = myNodes[i].children.view(); 
     alert(children.length); 
     if (children) { 
      for (var j = 0; j < children.length; j++) {     
       if (children[j].id === id) { 
        children[j].set("checked", true); 
       } 
     } 
    } 
} 

的问题是,在children.length总是为0,尽管每个父节点都有两个子节点。

谢谢

+0

这可能是因为子节点只在父级扩展时加载?我不知道是否有“扩展”或类似的事件。 – Massey

回答

1

我们必须强制树视图加载子节点。以下是更新后的代码:

function bindCheckboxToId(id) { 
    var treeView = $("#treeview").data("kendoTreeView"); 
    var myNodes = treeView.dataSource.view(); 
    for (var i = 0; i < myNodes.length; i++) { 
     myNodes[i].load(); 
     var children = myNodes[i].children.view(); 
     //alert(children.length); 
     if (children) { 
      for (var j = 0; j < children.length; j++) { 
       if (children[j].id === id) { 
        children[j].set("checked", true); 
       } 
      } 
     } 
    } 
}