Raggruppamento multilivello SlickGrid con selezione a livello di gruppo


10

stato corrente della griglia

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 57di 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:


2
farò una taglia grassa il più presto possibile
Julien

1
C'è un numero aperto n. 165 per questo, e penso che ciò che potrebbe aiutare è che tu o chiunque altro forniate semplicemente una soluzione a quel problema nel fork 6pac. Questo è un progetto Open Source con contributi della comunità, quindi qualsiasi contributo aiuta a migliorare questa lib nel corso degli anni.
ghiscoding il

Risposte:


1

vai ai plugin aggiornati

Una soluzione funzionale di cui sono fiducioso potrebbe mettere chiunque cerchi un comportamento simile sulla strada giusta, tuttavia, non sono sicuro di come entrambi questi plugin funzionerebbero indipendentemente. uno dei miei requisiti era consentire la selezione delle righe solo tramite la casella di controllo della riga.

un punto (che sono sicuro che sia facilmente migliorabile) è che la casella di controllo a livello di gruppo deve ancora essere definita nell'operatore del formato del gruppo

la soluzione principale al mio problema era espandere tutti i gruppi compressi quando si effettuano selezioni / deselezioni a livello di gruppo, eseguire qualsiasi routine di selezione / deselezione, quindi comprimere tutti i gruppi precedentemente espansi

MODIFICARE:

Questo non riesce quando la griglia ha grandi quantità di dati (10k righe). Riapertura con una taglia.

Sembra che il successo delle prestazioni di dover espandere e comprimere così tanti gruppi causino problemi.


1
@AmerllicA questa risposta è stata prematura e non funziona con set di dati di grandi dimensioni
Julien

1
@AmerllicA non è solo etico per favore come questo per un po 'di ricompensa, ma in realtà l'OP ha iniziato la ricompensa dopo che questa risposta è stata pubblicata ed è perché l'OP non ha avuto i risultati che voleva con questa risposta. Quindi, per favore, smettila di chiedere in questo modo la generosità che non hai guadagnato e invece cerca di aiutare OP con il suo problema se hai tempo per trovare una soluzione buona / migliore.
Christos Lytras,

@ChristosLytras, eliminerò immediatamente il mio commento, grazie per il suggerimento.
Amerllic, il

@ChristosLytras ha pensato la stessa cosa, non avrebbe potuto dirlo meglio
Islam Elshobokshy
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.