jqGrid sauver la case de l'état sélectionné
Cochant les cases à travers les pages dans jqGrid efface les cases sélectionnées. Donc, si je vérifie certaines cases à cocher sur la page 1, puis cliquez sur Suivant pour passer à la page 2, puis revenir à la page 1, les cases sélectionnées ne sont plus vérifiées.
Est-il un moyen de jqgrid pour gérer ce côté client?
OriginalL'auteur techlead | 2011-11-17
Vous devez vous connecter pour publier un commentaire.
La première partie de la réponse contenir la réponse sur votre question. Une petite version améliorée de la démo, vous pouvez trouver ici.
Si vous n'avez pas besoin de trier par "sélection multiple" colonne la démo faire ce que vous avez besoin. Quelques petites remarques à propos de la démo: La case à cocher sur la "sélection multiple" colonne sélectionner/désélectionner toutes les lignes que sur la page en cours. Si vous souhaitez un autre comportement, le code sera encore plus simple. J'ai inclus dans la démo sélection de 3 articles directement par le chargement de la grille. Deux éléments seront sélectionnés sur la première page et un article sur la deuxième page. Dans certains cas, le comportement peut être intéressant. Si vous n'en avez pas besoin vous devriez vous suffit de commenter la ligne
idsOfSelectedRows = ["8", "9", "10"];
Ci-dessous, vous trouverez les parties les plus importantes du code de la démo
Si vous le souhaitez, vous pouvez envisager de tenir
idsOfSelectedRows
comme un paramètre supplémentaire de jqGrid. Actuellement, il n'y a pas de validation de jqGrid paramètres et vous pouvez étendre là. L'avantage sera de la persistance deidsOfSelectedRows
avec les correspondants jqGrid.Mise à JOUR: Gratuit jqGrid fourche de jqGrid prend en charge
multiPageSelection: true
option, qui peut être combiné avecmultiselect: true
option. Il permet de tenir le paramètreselarrrow
(la liste des id des lignes sélectionnées) sur de nombreuses pages. Par défaut jqGrid réinitialiser le tableauselarrrow
pendant la recherche, mais dans le cas de l'utilisation de lamultiPageSelection: true, multiselect: true
il n'a pas de sorte de remise à zéro. En outre, il présélectionne toutes les lignes deselarrrow
tableau lors de la construction de la page. Ainsi, si l'on remplitselarrrow
tableau avec tous les rowids des éléments (toutes les lignes sur toutes les pages), puis les lignes seront affichées sélectionné. L'utilisateur ne peut toujours désélectionner certaines lignes et jqGrid ne changera pas les modifications apportées par l'utilisateur.La démo, créé pour la réponse, illustre l'utilisation de
multiPageSelection: true
en libre jqGrid. Une autre réponse décrit prochainement d'autres nouvelles options de libre jqGrid:multiselectPosition: "right"
, qui permet de déplacer la colonne de multiselect cases vers la droite,multiselectPosition: "none"
, qui permet l'utilisation multiple de la fonctionnalité sans multiselect colonne ethasMultiselectCheckBox
de rappel, qui peut être utilisé pour créer multiselect cases pas dans toutes les lignes de jqGrid.En outre, recommanderiez-vous que j'utilise le "idsOfSelectedRows' (comme recueillis dans votre exemple) afin de recueillir tous les id de ligne à travers les pages pour une utilisation à poste à un serveur d'action? Merci!!
Oh, désolé, une chose de plus :). Lors du rechargement de la grille (
$grid.jqGrid('setGridParam',{datatype:'json'}).trigger('reloadGrid');
), dois-je effacer le idsOfSelectedRows tableau manuellement? Ou est-il une sorte d'événement que je peut utiliser pour ce faire? Merci encore 🙂Merci!!!! Posté le code a des bugs qui sont résolus maintenant. A propos de la communication avec le serveur c'est un bon point. Je pense qu'il pourrait être utile de publier la
idsOfSelectedRows
dans postData. Par exemple, commepostData: {selectedIds: function() { return idsOfSelectedRows.join(','); }}
. Si la grille besoin d'être rechargé avec l'effacement des données leidsOfSelectedRows
tableau doivent être remis à zéro manuellement. Si la caractéristique dans le code principal de jqGrid on pourrait faire ça automatiquement. Partout où l'on nets.p.data = [];
dans le code on devrait clairementidsOfSelectedRows
trop. Merci pour les conseilsJe suis d'accord avec vous, mais je ne suis pas propriétaire du code de jqGrid. J'ai posté beaucoup de mes suggestions pour Tony. La plupart de là, ont été acceptés et ils sont une partie de jqGrid, mais quelqu'un (comme persistante sélections) ne l'est pas. Par la façon dont on peut utiliser
idsOfSelectedRows
que nouvelle option sur jqGrid. Si vous définissez comme toutes les autres propriétés (multiselect: true, idsOfSelectedRows: [], onSelectRow
) il serait bien accéder à la propriété en tant quethis.p.idsOfSelectedRows
à l'intérieur de toute jqGrid de rappel (onSelectRow
,onSelectAll
...) ou comme$(this).jqGrid("getGridParam", "idsOfSelectedRows")
.OriginalL'auteur Oleg