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