Ho implementato una griglia liscia con un modello di selezione personalizzato e un plug-in di selezione casella di controllo personalizzato. Ho anche aggiunto caselle di controllo a livello di gruppo per consentire la selezione al livello superiore. Uno dei miei requisiti è che i raggruppamenti compressi siano ancora selezionabili tramite le caselle di controllo di raggruppamento a livello padre.
Il mio ostacolo sembra essere che non riesco a capire come selezionare le righe che non sono attualmente visibili sul gruppo. La griglia liscia mantiene l'insieme di elementi selezionati visivamente mentre la vista dati griglie mantiene l'insieme completo di elementi selezionati, visibili o meno. Tuttavia, non riesco a capire come inserire i dati quando si fa clic sulla casella di controllo di gruppo di una riga compressa.
Sto configurando la mia griglia in questo modo:
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);
vai ai plugin personalizzati, troppo a lungo da includere qui
In particolare, se guardi la linea 57
di slick.checkboxselectionmodel
:
$.each(dataItem.rows, function(index, groupRow) {
var groupRowIndex = _self._grid.getData().getRowById(groupRow.id);
if (groupRowIndex) {
selection.push(groupRowIndex);
}
});
groupRowIndex non viene mai risolto per le righe nascoste e quindi non viene mai selezionato. Ho cercato di espandere il gruppo quando si fa clic, quindi risolvere le righe, il che funziona ma quando il gruppo viene compresso in seguito, vengono selezionate le righe sbagliate nella griglia.
Qualsiasi aiuto sarebbe molto apprezzato!
alcune note:
- se seleziono una riga e comprimo il suo gruppo, l'elemento mantiene la sua selezione
- esiste un diverso ramo della griglia slick che ha un'implementazione altrettanto non funzionale della selezione di gruppi