Проверьте наличие строки деталей в сетке кендо
Я использую сетку кендо, которая имеет подсетку, которая сворачивается, пока пользователь не решит отменить ее выбор. Чтобы убедиться, что пользователь не получит возможность развернуть строку, в которой нет данных в подсетке, я бы хотел проверить каждую строку на наличие дочерних данных. Если данные есть, то должна появиться стрелка, если нет, то нет.
Чтобы соединить две сетки вместе, я использую
.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. Особенно видно, что дефолт свернут.
Чтобы быть ясным, я хочу найти, имеет ли текущая строка дочернюю строку и если да, то измените элемент HasSubGrid перед выполнением оператора if.
Любая помощь в этом вопросе будет весьма признательна. Если вам нужна дополнительная информация, не стесняйтесь спрашивать.1 ответ:
Если я не ошибаюсь, если вы активируете шаблоны деталей, все строки будут иметь стрелку
Другими словами, для каждогоexpand, чтобы показать детали, независимо от того, есть ли у нее детали или нет. Это старая проблема на мой взгляд(проверьте здесь и здесь), так как вы должны исправить ее самостоятельно в событии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');Чтобы иметь строку детализации.
Одна важная деталь заключается в том, что содержимое деталей визуализируется только после расширения основной строки. Таким образом, вы не сможете управлять каким-либо элементом в деталях до его визуализации.