Siatka Telerik Kendo UI: grupowanie i sortowanie przetrwają grid.refresh (), ale zwinięte grupy są rozszerzane; jak zachować stan
Jak to jest typowe dla siatek w aplikacji „deski rozdzielczej”, która monitoruje dynamicznie zmieniające się dane, moja siatka interfejsu użytkownika (Telerik) Kendo jest odświeżana świeżymi danymi okresowo, co 60 sekund:
grid.dataSource.data(freshData);
grid.refresh(); // have been informed this refresh may not be necessary
Schemat się nie zmienia, ale niektóre nowe wiersze mogą pojawić się w zbiorze danych, a niektóre mogły zostać usunięte.
Chociażgrid.refresh()
pozostawia nienaruszone grupy, a stan sortowania jest również zachowany, wszelkie zwinięte grupy są rozszerzane.
PYTANIE: Jak zachować (lub przywrócić) rozszerzony / zwinięty stan grup (więc użytkownik skupiający się na konkretnej rozwiniętej grupie z innymi grupami nie jest zawalony / sfrustrowany okresowymi aktualizacjami, w których każda grupa zostaje ponownie rozwinięta przez domyślna)?
EDYCJA: Niektóre siatki Winforms umożliwiają „zrobienie migawki” stanu rozwinięcia / zwinięcia grupy przed odświeżeniem danych, a następnie ponowne zastosowanie tego stanu po odświeżeniu źródła danych.Jeśli wiersze nagłówka grupy w sieci Kendo UI miały identyfikatory UID (które przetrwały odświeżanie), można to zrobić. Ale zobacz sugerowane poniżej podejście, które nie obejmuje trwałych identyfikatorów UID.
PRZYKŁAD UŻYTKOWANIA: Oto typowy, choć nieco dramatyczny, przypadek użycia tej funkcji. Centrum Kontroli Chorób monitoruje wybuchy konkretnej grypy w czasie rzeczywistym według miasta. Co 15 sekund zestaw danych jest odświeżany. W tej chwili skupiają się na Los Angeles i rozbudowują to miasto, a inne miasta upadły. Jeśli co 15 sekund cała siatka się rozszerza, to wkurza lekarzy z CDC, a oni wchodzą i uduszają programistę, a potem idą do domu, żeby zagrać w golfa, a wszyscy w Los Angeles ulegają. Czy Kendo naprawdę chce być odpowiedzialny za tę katastrofę?
MOŻLIWE FUNKCJE WZMOCNIENIE PROBLEM: Zignoruj moją sugestię dotyczącą UID powyżej. Oto lepszy sposób. Sieć ma
<div class="k-group-indicator" data-field="{groupedByDataFieldName}">
...
</div>
Teraz, jeśli ten wskaźnik k-grupy-wskaźnika mógłby zawierać listę różnych wartościdata-field
przy czym dane powiązane z każdym kluczem są stanem rozwiniętym / zwiniętym odpowiedniej sekcji, wówczas możliwe byłoby zapisanie tej listy w buforze przed wywołaniem metody dataSource.data (someNewData), a następnie w nasłuchu obsługi zdarzeń dla danych dataBound wydarzenia, te rozszerzone państwa mogłyby zostać ponownie zastosowane. Aby znaleźć odpowiednią sekcję grupowania dla wartości grupowania, byłoby bardzo pomocne, jeślik-grouping-row
może mieć nieruchomość o nazwiegroup-data-value
która posiadała wartość grupowania danej sekcji grupowania, np. „Sprzedaż” lub „Marketing”, jeśli grupowano według pola danych o nazwie Dział.
<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>
a następnie wk-grouping-row
: <tr class="k-grouping-row" group-data-value="Sales">