Nous avons résolu ce même problème avec des sous-réseaux, et la solution peut être adaptable à un scénario de regroupement. Nous avons utilisé custom formatters pour ajouter des attributs de style et de données à la fois pour le lien d'en-tête/case à cocher et les cases à cocher de sous-grille. Ensuite, nous avons un lien ou une case à cocher dans la ligne d'en-tête avec un événement qui utilise jQuery pour sélectionner toutes les cases dans la sous-grille avec l'attribut et le style de données appropriés. Enfin, l'événement grid load complete ajoute le gestionnaire d'événements click pour le lien "check all".
Voici un exemple de formateur personnalisé pour la colonne de case à cocher de sous-grille. Notez l'attribut data-groupingId qui stocke une valeur utilisée pour lier la ligne d'en-tête aux lignes de sous-grille. Voici un exemple de formateur personnalisé pour la colonne "cocher tout". Notez l'attribut data-groupingId qui stocke une valeur utilisée pour lier la ligne d'en-tête aux lignes de sous-grille.
function checkAllColumnFormatter(cellValue, options, rowObject) {
var link = $("<a class=\"checkAll\" href=\"#\" data-groupingId=\"" + rowObject.Id + "\">Check All</a>");
var linkHtml = $("<div>").append(link.clone()).remove().html();
return linkHtml;
}
est ici le cas d'achèvement de charge que les crochets les événements de clic pour les liens « vérifier tous les » créés dans le formatter ci-dessus.
function mainGridLoadComplete(data) {
$(".checkAll").click(function (e) {
checkSubGridRows(
$(this).attr("data-groupingId")); // Use the data attribute to specify the value that will be on all the *relevant* subgrid checkboxes.
});
},
Enfin, voici la méthode qui fonctionne.
function checkSubGridRows(groupingId) {
$("#GridId .subgridCheck[data-groupingId=\"" + groupingId + "\"]").not(":disabled").each(
function() {
$(this).attr("checked", "checked");
});
}
Cela a très bien fonctionné pour nous. Tout bien considéré, quand les choses se compliquent comme ça, je préfère avoir un modèle côté client pour recevoir des données du service web JSON et être la source d'autorité pour le jqGrid. Je pense que cela serait finalement préférable à ce que jqGrid saisisse les données elles-mêmes et avalise les objets de données réels, ce qui rend difficile ou impossible l'accès direct aux données à des fins de référence ou de traitement. Cependant, créer et gérer une séparation modèle/vue côté client n'est pas une tâche facile. Donc cela fonctionne comme une alternative rapide. Mais méfiez-vous, car cela peut devenir trop rapide.