He implementado una cuadrícula pulida con un modelo de selección personalizado, así como un complemento de selección de casilla de verificación personalizado. También agregué casillas de verificación de nivel de grupo para permitir alternar la selección en el nivel superior. Uno de mis requisitos es que las agrupaciones contraídas todavía se pueden seleccionar a través de cualquier casilla de verificación de agrupación de nivel primario.
Mi obstáculo parece ser que no puedo entender cómo seleccionar filas que actualmente no están visibles en el grupo. La grilla pulida mantiene el conjunto de elementos visualmente seleccionados, mientras que la vista de datos de cuadrículas mantiene el conjunto completo de elementos seleccionados, visibles o no. Sin embargo, no puedo entender cómo canalizar los datos al hacer clic en la casilla de verificación de grupo de una fila contraída.
Estoy configurando mi grilla así:
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);
Lista de complementos personalizados, demasiado largos para incluirlos aquí.
Específicamente, si observa la línea 57
de slick.checkboxselectionmodel
:
$.each(dataItem.rows, function(index, groupRow) {
var groupRowIndex = _self._grid.getData().getRowById(groupRow.id);
if (groupRowIndex) {
selection.push(groupRowIndex);
}
});
groupRowIndex nunca se resuelve para filas ocultas, por lo que nunca se selecciona. Intenté expandir el grupo cuando hice clic, luego resolví las filas, lo que funciona, pero cuando el grupo se contrae después, se seleccionan las filas incorrectas en la cuadrícula.
Cualquier ayuda sería muy apreciada!
algunas notas:
- si selecciono una fila y contraigo su grupo, el elemento conserva su selección
- hay una rama diferente de la grilla elegante que tiene una implementación igualmente no funcional de la selección de grupo
fuente
Respuestas:
gist a complementos actualizados
Una solución funcional que estoy seguro podría poner a cualquiera que busque un comportamiento similar en el camino correcto, sin embargo, no estoy seguro de qué tan bien funcionaría cualquiera de estos complementos de forma independiente. uno de mis requisitos era permitir solo la selección de filas mediante la casilla de verificación de filas.
Un problema (que estoy seguro de que se mejora fácilmente) es que la casilla de verificación de nivel de grupo aún debe definirse en el operador de formato de grupo
La solución principal a mi problema era expandir todos los grupos contraídos al hacer selecciones / deselecciones a nivel de grupo, realizar cualquier rutina de selección / deselección, luego contraer cualquier grupo previamente expandido
EDITAR:
Esto falla cuando la cuadrícula tiene grandes cantidades de datos (10k filas). Reapertura con una recompensa.
Parece el golpe de rendimiento de tener que expandirse y colapsar tantos grupos causan problemas.
fuente