J'ai implémenté une grille lisse avec un modèle de sélection personnalisé ainsi qu'un plugin de sélection de case à cocher personnalisé. J'ai également ajouté des cases à cocher au niveau du groupe pour permettre de basculer la sélection au niveau supérieur. L'une de mes exigences est que les regroupements réduits soient toujours sélectionnables via toutes les cases à cocher de regroupement au niveau parent.
Ma pierre d'achoppement semble être que je ne peux pas comprendre comment sélectionner des lignes qui ne sont pas actuellement visibles sur le groupe. La grille lisse conserve l'ensemble des éléments sélectionnés visuellement tandis que la vue des données de la grille conserve l'ensemble complet des éléments sélectionnés, visibles ou non. Cependant, je ne peux pas comprendre comment diriger les données en cliquant sur la case à cocher de groupe d'une ligne réduite.
Je configure ma grille comme suit:
let checkboxSelectionModel = new Slick.CheckboxSelectionModel();
this.grid.setSelectionModel(checkboxSelectionModel);
this.grid.registerPlugin(new Slick.Data.GroupItemMetadataProvider());
let onSelectedRowIdsChanged = this.dataProvider.syncGridSelection(this.grid, true, true);
onSelectedRowIdsChanged.subscribe(
function(e: any, args: any)
{
//business logic stuff
}
);
let groupedCheckboxSelector = new Slick.GroupedCheckboxSelectColumn({
cssClass: "slick-cell-checkboxsel",
onSelectedRowIdsChangedHandler: onSelectedRowIdsChanged
});
let columns = this.grid.getColumns();
columns.unshift(groupedCheckboxSelector.getColumnDefinition());
this.grid.setColumns(columns);
this.grid.registerPlugin(groupedCheckboxSelector);
l'essentiel des plugins personnalisés, trop long pour être inclus ici
Plus précisément, si vous regardez la ligne 57
de slick.checkboxselectionmodel
:
$.each(dataItem.rows, function(index, groupRow) {
var groupRowIndex = _self._grid.getData().getRowById(groupRow.id);
if (groupRowIndex) {
selection.push(groupRowIndex);
}
});
groupRowIndex n'est jamais résolu pour les lignes masquées et ne sera donc jamais sélectionné. J'ai essayé de développer le groupe lorsque vous cliquez dessus, puis de résoudre les lignes, ce qui fonctionne, mais lorsque le groupe est réduit par la suite, les mauvaises lignes sont sélectionnées dans la grille.
toute aide serait grandement appréciée!
quelques notes:
- si je sélectionne une ligne et réduit son groupe, l'élément conserve sa sélection
- il y a une branche différente de la grille lisse qui a une implémentation également non fonctionnelle de la sélection de groupe
la source
Réponses:
l'essentiel des plugins mis à jour
Une solution fonctionnelle qui, j'en suis convaincu, pourrait mettre quiconque cherche un comportement similaire sur la bonne voie, cependant, je ne sais pas dans quelle mesure l'un de ces plugins fonctionnerait indépendamment. l'une de mes exigences était de n'autoriser la sélection des lignes que via la case à cocher des lignes.
un problème (qui, j'en suis sûr, est facilement amélioré) est que la case à cocher au niveau du groupe doit encore être définie dans votre opérateur de format de groupe
la principale solution à mon problème était d'étendre tous les groupes réduits lors des sélections / désélectionnements au niveau du groupe, d'effectuer toutes les routines de sélection / désélection, puis de réduire tous les groupes précédemment développés
ÉDITER:
Cela échoue lorsque la grille contient de grandes quantités de données (10 000 lignes). Réouverture avec une prime.
Il semble que les performances aient dû être développées et réduites, de nombreux groupes provoquent des problèmes.
la source