Telerik Kendo UI-Raster: Gruppieren und Sortieren überleben grid.refresh (), aber reduzierte Gruppen werden erweitert; wie man den Zustand bewahrt

Wie es für Grids in einer "Dashboard" -Anwendung typisch ist, die sich dynamisch ändernde Daten überwacht, wird mein (Telerik) Kendo UI-Grid regelmäßig alle 60 Sekunden mit neuen Daten aktualisiert:

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

Das Schema wird nicht geändert, aber einige neue Zeilen werden möglicherweise im Dataset angezeigt und einige wurden möglicherweise entfernt.

Obwohl diegrid.refresh() Die Gruppierungen bleiben erhalten, und der Sortierstatus bleibt ebenfalls erhalten. Reduzierte Gruppen werden erweitert.

FRAGE: Wie kann der erweiterte / reduzierte Status der Gruppen beibehalten (oder wiederhergestellt) werden? (Ein Benutzer, der sich auf eine bestimmte erweiterte Gruppe mit den anderen reduzierten Gruppen konzentriert, wird durch die regelmäßigen Aktualisierungen, um die jede Gruppe erneut erweitert wird, nicht beeinträchtigt / frustriert.) Standard)?

BEARBEITEN: Einige Winforms-Raster bieten die Möglichkeit, vor dem Aktualisieren von Daten einen Schnappschuss des Erweitern / Reduzieren-Status der Gruppe zu erstellen und diesen Status nach dem Aktualisieren der Datenquelle erneut anzuwenden.Wenn die Gruppenkopfzeilen im Kendo-UI-Raster UIDs hatten (die eine Aktualisierung überstanden haben), könnte dies durchgeführt werden. Beachten Sie jedoch den unten vorgeschlagenen Ansatz, der keine persistenten UIDs umfasst.

GEBRAUCHSFALL: Hier ist ein typischer, wenn auch etwas dramatischer Anwendungsfall für diese Funktion. Das Center for Disease Control überwacht in Echtzeit die Ausbrüche einer bestimmten Grippestammart nach Stadt. Alle 15 Sekunden wird der Datensatz aktualisiert. Sie konzentrieren sich momentan auf Los Angeles und haben diese Stadt erweitert und die anderen Städte sind zusammengebrochen. Wenn sich alle 15 Sekunden das gesamte Raster ausdehnt, sind die Ärzte im CDC verärgert, gehen hinein und erwürgen den Programmierer, und dann gehen sie nach Hause, um Golf zu spielen, und jeder in Los Angeles erliegt. Will Kendo wirklich für diese Katastrophe verantwortlich sein?

MÖGLICHE FEATURE-ENHANCEMENT-VORSCHLÄGE: Ignorieren Sie meinen obigen Vorschlag zu einer UID. Hier ist ein besserer Weg. Das Gitter hat

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

Nun, wenn dieser k-Gruppen-Indikator div eine Liste der verschiedenen Werte von enthalten könntedata-field Wenn die zugeordneten Daten jedes Schlüssels der erweiterte / reduzierte Zustand des entsprechenden Abschnitts sind, kann diese Liste in einem Puffer gespeichert werden, bevor die Methode dataSource.data (someNewData) aufgerufen und anschließend im Eventhandler auf dataBound gewartet wird Eventuell könnten diese Erweiterungszustände erneut angewendet werden. Um den entsprechenden Gruppierungsabschnitt für den Gruppierungswert zu finden, wäre es sehr hilfreich, wenn diek-grouping-row könnte eine Eigenschaft namens habengroup-data-value die den Gruppierungswert des bestimmten Gruppierungsabschnitts enthielt, z. "Vertrieb" oder "Marketing", wenn eine Gruppierung nach einem Datenfeld namens "Abteilung" erfolgt.

<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>

und dann in derk-grouping-row: <tr class="k-grouping-row" group-data-value="Sales">

Antworten auf die Frage(4)

Ihre Antwort auf die Frage