Implementei uma grade lisa com um modelo de seleção personalizado e um plug-in de seleção de caixa de seleção personalizada. Também adicionei caixas de seleção no nível do grupo para permitir a seleção no nível superior. Um dos meus requisitos é que os agrupamentos recolhidos ainda possam ser selecionados por qualquer caixa de seleção de agrupamento no nível pai.
Minha pedra de tropeço parece ser que não consigo descobrir como selecionar linhas que não estão atualmente visíveis no grupo. A grade lisa mantém o conjunto de itens selecionados visualmente, enquanto a visualização de dados das grades mantém o conjunto completo de itens selecionados, visíveis ou não. No entanto, não consigo descobrir como inserir dados ao clicar na caixa de seleção do grupo de uma linha recolhida.
Estou configurando minha grade assim:
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 os plug-ins personalizados, muito tempo para incluir aqui
Especificamente, se você observar a linha 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 é resolvido para linhas ocultas e, portanto, nunca é selecionado. Tentei expandir o grupo quando clicado e depois resolver as linhas, o que funciona, mas quando o grupo é recolhido posteriormente, as linhas erradas são selecionadas na grade.
Qualquer ajuda seria muito apreciada!
algumas notas:
- se eu selecionar uma linha e recolher seu grupo, o item manterá sua seleção
- existe um ramo diferente da grade lisa que tem uma implementação igualmente não funcional da seleção de grupos
fonte
Respostas:
lista de plugins atualizados
Uma solução funcional que estou confiante pode colocar qualquer pessoa que procure um comportamento semelhante no caminho certo; no entanto, não tenho certeza de como esses plug-ins funcionariam independentemente. um dos meus requisitos era permitir apenas a seleção de linhas pela caixa de seleção de linhas.
uma dica (que eu tenho certeza que é facilmente aprimorada) é que a caixa de seleção no nível do grupo ainda precisa ser definida no seu operador de formato de grupo
a principal solução para o meu problema foi expandir todos os grupos recolhidos ao fazer seleções / desmarcações em nível de grupo, executar rotinas de seleção / desmarcar e recolher quaisquer grupos expandidos anteriormente
EDITAR:
Isso falha quando a grade possui grandes quantidades de dados (10 mil linhas). Reabertura com uma recompensa.
Parece que o impacto no desempenho de ter que expandir e contrair tantos grupos causa problemas.
fonte