Как я могу выбрать все строки в дочерней сетке, когда выбрана ее родительская строка, с использованием сетки кендо?

0

У меня есть иерархическая иерархия кендо. Когда я нажимаю строку в родительской сетке, родительская строка выбирается и расширяется, чтобы показать дочернюю сетку. Моя проблема в том, что мне нужно иметь возможность изменять все дочерние строки в выбранном состоянии.

Вот как я могу изменить родительскую строку в выбранное состояние:

$("#gridMasterInfo").delegate('tbody>tr', 'click', function (e) {
     var row = $(this);
     $(this).toggleClass('k-state-selected');                       
}); 

Вот пример JSFiddle выбора строки до сих пор

Любая помощь приветствуется, спасибо.

  • 0
    ты получил решение для этого?
  • 0
    пока нет, все еще ищу
Показать ещё 4 комментария
Теги:
kendo-ui
kendo-grid

1 ответ

1
Лучший ответ

Вам нужно немного программирования и знать, как выбирать и отменить выбор строк...

Самое первое, что создает метод detailInit для вашей сетки, вы, вероятно, знакомы с этим, и единственное, что здесь, это добавить небольшой трюк, чтобы легко найти строки данных в родительской сетке.

function detailInit(e) {
    $("<div class='ob-child-grid'/>").appendTo(e.detailCell).kendoGrid({
        ...
    });
}

Как вы можете видеть, я добавил ob-child-grid в контейнер сетки. Я действительно могу полагаться на k-secondary (этот класс добавлен интерфейсом Kendo UI к этому узлу), но я предпочитаю не полагаться на не документированную функциональность, поэтому код менее уязвим для будущих модификаций KendoUI.

Далее задается обработчик change который вызывается при выборе строки в родительском элементе. Эта функция должна:

  1. Удалите ранее выбранные строки в сетке деталей. Я предполагаю, что после того, как вы выберете новую строку в родительском, вы хотите, чтобы дети из ранее выбранного родителя были отменены.
  2. Найдите дочернюю сетку текущей выбранной строки.
  3. Выберите каждый элемент в дочерней сетке.

Давайте посмотрим, как это сделать:

// Remove previous selections
$("tr", ".ob-child-grid").removeClass("k-state-selected");

Как вы видите, этот шаг довольно прост, просто удалите "k-state-selected", это все, что вам действительно нужно.

// Find the child grid.
var child = this.select().next().find(".ob-child-grid");

this.select() получает в настоящее время выбранную строку, а next() получает следующую строку, где KendoUI помещает дочернюю сетку. С помощью find(".ob-child-grid") мы находим узел, где на самом деле сетка.

// Select every row
$("tr", child).addClass("k-state-selected");

Мы добавляем k-state-selected который является классом, который отмечает выбранную строку.

Вы можете играть с этой идеей здесь: http://jsfiddle.net/OnaBai/XaMer/

  • 0
    Это чудесно! единственное отличие состоит в том, что мне действительно нужно сохранять состояние выбранных дочерних элементов до тех пор, пока родительский элемент не будет отключен (независимо от того, какой другой родительский ряд выбран). Большое спасибо за помощь. Я очень ценю это.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню