Telerik Kendo UI grille: regroupement et de tri de survivre grille.refresh() mais s'est effondré groupes obtenir étendue; comment préserver l'état
Comme il est typique pour les grilles dans un "tableau de bord" de l'application qui surveille l'évolution dynamique des données, mon (Telerik) Kendo UI grille est à jour avec de nouvelles données périodiquement, toutes les 60 secondes:
grid.dataSource.data(freshData);
grid.refresh(); //have been informed this refresh may not be necessary
Le schéma ne change pas, mais certaines nouvelles lignes pourraient apparaître dans le jeu de données, et que certains ont été supprimés.
Bien que le grid.refresh()
laisse les groupements intacte, et l'état de tri est également préservé, tout s'est effondré groupes obtenir étendue.
QUESTION: Comment conserver (ou de rétablir) l'élargissement de la/état effondré de groupes, de sorte qu'un utilisateur en se concentrant sur un groupe avec les autres groupes s'est effondré n'est pas incommodés/frustré par les mises à jour périodiques, dans lequel chaque groupe reçoit re-développée par défaut)?
EDIT: Certains Winforms grilles de fournir un moyen de "prendre un instantané" du groupe expand/collapse état avant l'actualisation des données, puis d'appliquer à nouveau cet état après la source de données d'actualisation. Si le groupe de lignes d'en-tête dans le Kendo UI grille de Uides (qui a survécu à une actualisation) il pourrait en être fait. Mais voir l'approche proposée ci-dessous, qui n'implique pas persistante de Uides.
CAS D'UTILISATION:
Voici un exemple typique d'un peu dramatique des cas d'utilisation de cette fonctionnalité. Centre de Contrôle des Maladies est le suivi en temps réel des épidémies de une souche particulière du virus de la grippe, par ville. Toutes les 15 secondes, le jeu de données est en cours d'actualisation. Il se concentre pour l'instant sur Los Angeles et pour que la ville s'est étendue, et les autres villes s'est effondré. Si toutes les 15 secondes, l'ensemble de la grille augmente, il pisse hors médecins du CDC et ils y vont et étrangler le programmeur et puis ils rentrent à la maison pour jouer au golf, et tout le monde à Los Angeles succombe. Ne Kendo vraiment envie d'être responsable de ce désastre?
POSSIBLE AMÉLIORATION DE FONCTIONNALITÉ DE SUGGESTION:
Ignorer ma suggestion à propos d'un UIDE ci-dessus. Voici une meilleure façon.
La grille a
<div class="k-group-indicator" data-field="{groupedByDataFieldName}">
...
</div>
Maintenant, si le k-groupe-indicateur div pourrait contenir une liste de valeurs distinctes de data-field
avec chaque clé est associée à des données d'être élargi/état effondré de la section correspondante, il serait alors possible d'enregistrer cette liste dans un tampon avant de faire un appel à la source de données.de données( someNewData) méthode, puis dans le gestionnaire d'événements à l'écoute liées aux données de l'événement, ceux d'élargir les états pourraient être réappliqué. Afin de trouver le correspondant de regroupement de la section pour la valeur de regroupement, il serait très utile si le k-grouping-row
pourrait avoir une propriété appelée group-data-value
qui a tenu la valeur de regroupement du regroupement de la section, par exemple, "Ventes" ou "Marketing" si l'on devait le regroupement de données, un champ appelé Ministère.
<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>
et puis dans le k-grouping-row
: <tr class="k-grouping-row" group-data-value="Sales">
OriginalL'auteur Tim | 2012-12-19
Vous devez vous connecter pour publier un commentaire.
Il est compréhensible que ce n'est pas une fonctionnalité intégrée. C'est assez compliqué parce que si vous avez des groupes imbriqués, vous devrez vous souvenir de chaque groupe s'est effondré dans la hiérarchie qu'il a existé dans. Depuis que les articles seront se déplaçant dans et hors de la source de données, ce serait une douleur à la piste.
Cela dit, voici une très hackish façon d'accomplir ce que vous voulez, tant que vous ne soyez pas trop compliqué. Il utilise juste le
groupHeaderTemplate
propriété pour ajouter un UID pour chaque ligne de regroupement. Je suis juste en utilisant le nom de la colonne + valeur de l'UID, ce qui est techniquement faux si vous obtenez dans plusieurs regroupements, mais il est assez bon pour un exemple.À partir de là, avant de vous rafraîchir, vous pouvez trouver l'effondrement des groupes à partir de l'attribut ARIA qui Kendo a maintenant (note, vous devez être en utilisant 2012 T3 pour que cela fonctionne). Puis de forage vers le bas et obtenir le liquide qui a été ajouté par le modèle.
Après l'actualisation, vous pouvez trouver les lignes avec un UID et les passer à la grille de l'
.collapseGroup()
fonction re-effondrement.Ici, c'est un travail jsFiddle que le démontre.
Et le code de la jsFiddle copier/coller dans (veuillez noter que je n'définir le modèle sur la Ville de la colonne, de sorte que seule la Ville de la colonne sera de préserver le groupement d'effondrement dans cet exemple!):
HTML:
JavaScript:
Personnellement, je n'aime pas cette solution. Il est trop hacky et beaucoup trop de DOM traversée. Cependant, sans re-mise en œuvre de la grille de widget que je ne peux pas penser à une meilleure façon de le faire. Il sera peut-être assez bon pour ce que vous essayez d'accomplir, ou de vous donner une meilleure idée.
Une dernière remarque, je l'ai vérifié le Kendo UI code source et il ne semble pas en voie de regroupements élargie et s'est effondré. Ils font quelque chose de semblable à ce que j'ai fait avec l'attribut aria, mais au lieu de vérifier la classe que les lecteurs de l'icône d'état:
Si vous n'êtes pas à l'aide de Kendo 2012 T3 et ne peut pas utiliser l'aria-élargi attribut, vous pouvez modifier le code pour vérifier la classe d'une icône à la place.
OriginalL'auteur CodingWithSpike
"Répondre" à ma propre question juste pour obtenir la meilleure lisibilité du code-mise en forme dans la réponse de l'éditeur. C'est une extension de la discussion.
Je suis d'accord que des groupes imbriqués sont plus compliquées. Si chaque
k-grouping-row
avait une propriété contenant un JSON-représentation de la matrice de données distinctes valeurs sur lesquelles le regroupement est basé, il serait possible pour les développeurs d'extraire les différentes combinaisons de données-valeurs de chaque effondré k-regroupement-ligne. (Il serait utile si le k-regroupement-ligne, directement indiqué qu'il a été développé ou réduit, mais que les informations peuvent être obtenues à partir de la cellule qu'il contient, non?)Avec cet ensemble de différentes valeurs pour les catégories regroupées dans la main, on pourrait construire sa propre carte à l'effondrement des groupes. Les différentes valeurs de données pourrait agir comme la clé pour les objets de cette carte; chaque distinctes-la combinaison de données étant unique et associé qu'à un seul groupement section de la grille, peu importe le nombre de niveaux d'imbrication sont impliqués.
Par exemple, pour les deux niveaux d'imbrication
by Department by ProductType
nous permettrait de voir quelque chose comme ceci:Le Ministère de la valeur est "Ventes" et le type de produit de la valeur est "des Jouets, des Jeux et des Vidéos". Le JSON poignées des virgules dans le données de la valeur.
Pour les trois niveaux de regroupement par
state, city, zipcode
on aurait:Ces valeurs de données sont connues lorsque le groupe est créé de sorte qu'ils sont disponibles pour être injecté dans le k-groupe-ligne dans une unique poignée.
Bien que les différentes valeurs sont une unique poignée, ils n'éliminent pas la nécessité de parcourir le DOM, la visite de chaque
k-grouping-row
quand on veut l'appliquer de nouveau l'effondrement de l'état. Pourtant, le Kendo grille de ne pas avoir à mettre en œuvre la restauration de l'effondrement de l'état par défaut, si il a été estimé que c'était trop cher une opération. Mais vous donner aux développeurs un moyen simple de le réaliser à l'aide dedata-distinct-values=[...]
, et les développeurs pourraient décider eux-mêmes si le gain de performance, le cas échéant, a été justifiée par les exigences de l'application.OriginalL'auteur Tim
J'ai commencé un solide groupe de l'état de préservation de l'extension du réseau qui est conçu pour fonctionner avec les deux Kendo Grille et ASP.Net RadGrid (contrôle des implémentations spécifiques qui utilisent la fonctionnalité commune).
Cette extension permet des améliorations significatives à Telerik du groupe de l'état de conservation exemple et améliore RadGrid, pour qui rien d'autre disponible en vient même à proximité du Kendo UI exemple. Vous pouvez voir la liste des améliorations ici, et vous pouvez vérifier le code ici.
J'aimerais savoir ce que vous en pensez.
Merci. Je suis d'accord, ajouter localStorage état de la fonctionnalité devrait être trivial à ce point. J'utilise actuellement jStorage de croix-navigateur local de stockage de support, donc je vais le crochet dans la bibliothèque, s'il est chargé, avant que le groupe de l'état de conservation de script. Sinon, le script d'accès localStorage directement.
génial, merci
OriginalL'auteur Andre Light
Tout d'abord vous aurez rarement besoin d'appeler actualiser à partir de votre code. La grille (et toutes les données liées Kendo widgets) sont à l'écoute en cas de changement de la source de données et actualiser en conséquence.
Par la conception de l'agrandir/réduire l'état de ces groupes est pas préservé. La modification de la source de données sera la cause de tous les groupes pour obtenir étendue (qui est leur état par défaut).
OriginalL'auteur Atanas Korchev