Сетка пользовательского интерфейса Telerik Kendo: группировка и сортировка сохраняются grid.refresh (), но свернутые группы расширяются; как сохранить государство

Как это характерно для сеток в приложении «панель мониторинга», которое отслеживает динамически изменяющиеся данные, моя (Telerik) сетка пользовательского интерфейса Kendo обновляется свежими данными периодически, каждые 60 секунд:

grid.dataSource.data(freshData);
grid.refresh();  // have been informed this refresh may not be necessary

Схема не изменяется, но некоторые новые строки могут отображаться в наборе данных, а некоторые могут быть удалены.

Хотяgrid.refresh() оставляет группировки нетронутыми, и состояние сортировки также сохраняется, все свернутые группы расширяются.

ВОПРОС: Как сохранить (или восстановить) развернутое / свернутое состояние групп (чтобы пользователь, сосредоточенный на конкретной расширенной группе с другими свернутыми группами, не испытывал неудобств / разочарований от периодических обновлений, в которых каждая группа повторно раскрывается по умолчанию)?

РЕДАКТИРОВАТЬ: Некоторые сетки Winforms предоставляют способ «сделать снимок» состояния развертывания / свертывания группы перед обновлением данных, а затем повторно применить это состояние после обновления источника данных.Если бы строки заголовка группы в сетке пользовательского интерфейса Kendo имели UID (которые пережили обновление), это можно было бы сделать. Но посмотрите предложенный ниже подход, который не включает постоянные UID.

СЛУЧАЙ ИСПОЛЬЗОВАНИЯ: Вот типичный, но несколько драматичный вариант использования этой функции. Центр по контролю заболеваний контролирует в реальном времени вспышки определенного штамма гриппа по городам. Каждые 15 секунд набор данных обновляется. В данный момент они сосредоточены на Лос-Анджелесе, и этот город расширился, а другие города рухнули. Если каждые 15 секунд вся сетка расширяется, это бесит врачей в CDC, и они входят и душат программиста, а затем они идут домой, чтобы играть в гольф, и все в Лос-Анджелесе уступают. Кендо действительно хочет быть ответственным за это бедствие?

ВОЗМОЖНОЕ ПРЕДЛОЖЕНИЕ ОБСЛУЖИВАНИЯ ФУНКЦИЙ: игнорируйте мое предложение о UID выше. Вот лучший способ. Сетка имеет

<div class="k-group-indicator" data-field="{groupedByDataFieldName}">
    ...
</div>

Теперь, если этот div-индикатор k-группы может содержать список различных значенийdata-field так как данные, связанные с каждым ключом, являются развернутым / свернутым состоянием соответствующего раздела, можно было бы сохранить этот список в буфер, прежде чем вызывать метод dataSource.data (someNewData), а затем в обработчике событий, прослушивающем dataBound событие, эти расширенные состояния могут быть повторно применены. Чтобы найти соответствующий раздел группировки для значения группировки, было бы очень полезно, если быk-grouping-row может иметь свойство под названиемgroup-data-value который содержал значение группировки конкретного раздела группировки, например, «Продажи» или «Маркетинг», если они группируются по полю данных, называемому «Отдел».

<div class="k-group-indicator" data-field="dept" data-title="Dept" data-dir="asc">
       ...
   <div class="k-group-distinct-values">
     <div group-data-value="Sales" aria-expanded="false" />
     <div group-data-value="Events Planning" aria-expanded="true" />
   </div>  
</div>

а затем вk-grouping-row: <tr class="k-grouping-row" group-data-value="Sales">

Ответы на вопрос(4)

Ваш ответ на вопрос