Ich habe ein Slick-Grid mit einem benutzerdefinierten Auswahlmodell sowie einem benutzerdefinierten Checkbox-Auswahl-Plugin implementiert. Ich habe auch Kontrollkästchen auf Gruppenebene hinzugefügt, um das Umschalten der Auswahl auf der obersten Ebene zu ermöglichen. Eine meiner Anforderungen ist, dass reduzierte Gruppierungen weiterhin über alle Kontrollkästchen für Gruppierungen auf übergeordneter Ebene ausgewählt werden können.
Mein Stolperstein scheint zu sein, dass ich nicht herausfinden kann, wie Zeilen ausgewählt werden sollen, die derzeit in der Gruppe nicht sichtbar sind. Das glatte Raster verwaltet den Satz visuell ausgewählter Elemente, während die Rasterdatenansicht den vollständigen Satz ausgewählter Elemente verwaltet, ob sichtbar oder nicht. Ich kann jedoch nicht herausfinden, wie Daten übertragen werden, wenn ich auf das Kontrollkästchen Gruppe einer reduzierten Zeile klicke.
Ich konfiguriere mein Grid wie folgt:
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);
Gist , um benutzerdefinierte Plug - In zu lange hier schließen
Insbesondere wenn Sie in Zeile sehen 57
von slick.checkboxselectionmodel
:
$.each(dataItem.rows, function(index, groupRow) {
var groupRowIndex = _self._grid.getData().getRowById(groupRow.id);
if (groupRowIndex) {
selection.push(groupRowIndex);
}
});
groupRowIndex wird niemals für ausgeblendete Zeilen aufgelöst und wird daher niemals ausgewählt. Ich habe versucht, die Gruppe beim Klicken zu erweitern und dann die Zeilen aufzulösen. Dies funktioniert, aber wenn die Gruppe anschließend reduziert wird, werden die falschen Zeilen im Raster ausgewählt.
Jede Hilfe wäre sehr dankbar!
einige Notizen:
- Wenn ich eine Zeile auswähle und ihre Gruppe reduziere, behält das Element seine Auswahl bei
- Es gibt einen anderen Zweig des Slick-Grids, der eine ebenso nicht funktionierende Implementierung der Gruppenauswahl aufweist
quelle
Antworten:
Kern zu aktualisierten Plugins
Eine funktionale Lösung, von der ich überzeugt bin, dass sie jeden, der ein ähnliches Verhalten sucht, auf den richtigen Weg bringen kann. Ich bin mir jedoch nicht sicher, wie gut eines dieser Plugins unabhängig voneinander funktionieren würde. Eine meiner Anforderungen war es, die Zeilenauswahl nur über das Kontrollkästchen Zeile zuzulassen.
Ein Problem (von dem ich sicher bin, dass es leicht zu verbessern ist) ist, dass das Kontrollkästchen auf Gruppenebene noch in Ihrem Gruppenformatoperator definiert werden muss
Die Hauptlösung für mein Problem bestand darin, alle reduzierten Gruppen zu erweitern, wenn Sie auf Gruppenebene auswählen / die Auswahl aufheben, Routinen zum Auswählen / Deaktivieren ausführen und dann alle zuvor erweiterten Gruppen reduzieren
BEARBEITEN:
Dies schlägt fehl, wenn das Raster große Datenmengen enthält (10.000 Zeilen). Wiedereröffnung mit einem Kopfgeld.
Es sieht so aus, als würde der Leistungseinbruch, so viele Gruppen erweitern und reduzieren zu müssen, Probleme verursachen.
quelle