剑道。如何访问嵌套网格

时间:2017-05-04 14:50:25

标签: kendo-grid

我使用hierarhical Kendo Grid。 http://demos.telerik.com/kendo-ui/grid/hierarchy

使用以下功能创建嵌套网格:

function detailInit(e) {
$("<div/>").appendTo(e.detailCell).kendoGrid({
    name: "nestedGrid",
    dataSource: {
        ...
    },
    columns: [
        ...
}).addClass("nested-grid-class");

如何在另一个功能中访问网格?例如:

$(window).load(function() {
      var grid = $(".nested-grid-class").data("kendoGrid");
      alert('grid =  ' + grid);                      // grid = undefined
      var grid = $("nestedGrid").data("kendoGrid");
      alert('grid =  ' + grid);                      // grid = null
      var grid = $("#nestedGrid").data("kendoGrid");
      alert('grid =  ' + grid);                      // grid = null
     var grid = $("[name='nestedGrid']").data("kendoGrid");
      alert('grid =  ' + grid);                      // grid = null
});

桑德曼提出的方式也不起作用

var grid = $("#MainGrid").data("kendoGrid");
alert('MainGrid = ' + grid);         // ok
var parentRows = grid.tbody.find("tr.k-master-row");
alert('parentRows = ' + parentRows);        // ok

parentRows.each(function (e) {
    var row = $(this).next("tr");
    alert('row = ' + row);        // ok
    if (row.hasClass("k-detail-row")) {
        var nestedGrid = row.find(".k-grid").data("kendoGrid");
        alert('nestedGrid = ' + nestedGrid);        // undefined
        var nestedGrid1 = row.find(".nested-grid-class").data("kendoGrid");
        alert('nestedGrid1 = ' + nestedGrid1);        // undefined        
    }
});

1 个答案:

答案 0 :(得分:0)

为了访问网格每一行的嵌套网格,您可以使用以下内容:

var grid = $("#grid").data("kendoGrid");
var parentRows = grid.tbody.find("tr.k-master-row");

这应该可以获得所有parent行。然后,您可以使用.each迭代这些内容,以便访问以下内容中的子网格:

parentRows.each(function(e){
   var row = $(this).next("tr");
   if(row.hasClass("k-detail-row")){
      var nestedGrid = row.find(".k-grid").data("kendoGrid");
      // EDIT: In your case, you may need to get by class - UNTESTED
      // var row.find(".nested-grid-class").data("kendoGrid");
      //access nested grid data here          
   }
});

修改

我已根据您在问题中发送的初始Dojo准备了example,该Dojo会在控制台中记录每个初始化的嵌套网格。 (注意:“.k-grid”和“.nested-grid-class”都是有效的选择器。

您遇到的问题是,只有第一行在dataBound事件中初始化,因此这意味着它是唯一一个创建嵌套网格的行。我进一步扩展了示例,以便在dataBound函数(this.expandRow(this.tbody.find("tr.k-master-row"));)期间初始化所有嵌套网格。

如果您现在检查控制台,您将看到6个父行的列表,以及包含每个嵌套网格数据源的6个列表。

Console containing output