我使用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
}
});
答案 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个列表。