检查 kendo 网格中的详细信息行

Check for detail row in kendo grid

我使用 kendo 网格,它有一个子网格,该子网格在用户决定取消选择之前一直处于折叠状态。为了确保用户无法选择展开子网格中没有数据的行,我想检查每一行的子数据。如果有数据,应该出现一个箭头,如果没有则没有。

为了将两个网格耦合在一起,我正在使用

.ClientDetailTemplateId("MyTemplate")

我想要的代码 运行 看起来像这样

function dataBound(e) {
    var grid = e.sender;

    var gridData = grid.dataSource.view();
    expandGridDetailsSystem(e);

    for (var i = 0; i < gridData.length; i++) {
        //get the item uid
        var currentUid = gridData[i].uid;
        var currentRow = grid.table.find("tr[data-uid='" + currentUid + "']");
        var detailRow = currentRow.next(".k-detail-row");

        if (!detailRow) {
            //remove the expand button
            $(currentRow).find(".k-hierarchy-cell a").removeClass("k-icon k-i-expand");
        }
    }
    collapseGridDetailsSystem(e);
}

if (!gridData[i].HasSubGrid) 是我想将布尔值保存到的内容。问题是我不知道如何检查 k-detail-cell。特别是看到默认是折叠的。

明确地说,我想查找当前行是否有子行,如果有,则在执行 if 语句之前更改 HasSubGrid 元素。

如有任何帮助,我们将不胜感激。如果需要更多信息,请随时询问。

如果我没记错的话,如果您激活详细信息模板,所有行都会有一个 expand 箭头来显示详细信息,无论是否有详细信息。在我看来这是一个老问题(检查here and here)因为你必须在dataBound事件中自己修复它,这有点难看。鉴于此,您的所有行都将保证有一个同级详细信息行,该行在 master 行展开之前一直处于隐藏状态。

换句话说,对于网格中的每个 tr.k-master-row(实际上是显示的数据行),它旁边都会有一个 tr.k-detail-row,例如:

<tr class='k-master-row'></tr>
<tr class='k-detail-row'></tr>
<tr class='k-master-row'></tr>
<tr class='k-detail-row'></tr>

所以你可以做...

var currentRow = grid.table.find("tr[data-uid='" + currentUid + "']"),
    detailRow = currentRow.next('.k-detail-row');

有明细行。

一个重要的细节是细节内容只有在主行展开后才会呈现。因此,您将无法在渲染之前详细管理任何元素。