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