Blazor Seleção de linha de grade hierárquica
O recurso Ignite UI for Blazor Seleção de Linha em Blazor Grade Hierárquica permite que os usuários selecionem, realcem ou desmarquem interativamente uma ou várias linhas de dados. Existem vários modos de seleção disponíveis no IgbHierarchicalGrid
:
- Nenhuma seleção
- Seleção múltipla
- Seleção única
Blazor Row Selection Example
O exemplo abaixo demonstra os três tipos de IgbHierarchicalGrid
's Seleção de linha comportamento. Use o menu suspenso abaixo para ativar cada um dos modos de seleção disponíveis. Use a caixa de seleção para esconder ou programa as caixas de seleção do seletor de linha.
Setup
Para configurar a seleção de linha no IgbHierarchicalGrid
, você só precisa definir a RowSelection
propriedade. Essa propriedade aceita GridSelectionMode
enumeração.
GridSelectionMode
expõe os seguintes modos:
- Nenhum
- Solteiro
- Múltiplo
Abaixo, veremos cada um deles com mais detalhes.
Nenhuma seleção
Por padrão, a seleção de linha está desabilitada IgbHierarchicalGrid
(RowSelection
é Nenhuma). Portanto, você não pode selecionar ou desmarcar uma linha por meio da interação com a IgbHierarchicalGrid
interface do usuário, a única maneira de concluir essas ações é usar os métodos de API fornecidos.
Seleção única
A seleção de linha única agora pode ser facilmente configurada, a única coisa que você precisa fazer é definir RowSelection
para a propriedade Single
. Isso lhe dá a oportunidade de selecionar apenas uma linha dentro de uma grade. Você pode selecionar uma linha clicando em uma célula ou pressionando a tecla de espaço quando você foca em uma célula da linha, e é claro que você pode selecionar uma linha clicando no campo seletor de linha. Quando a linha é selecionada ou desmarcada, o evento RowSelectionChanging
é emitido.
<IgbHierarchicalGrid Width="100%"
Id="grid"
Height="100%"
RowSelection=GridSelectionMode.Single
PrimaryKey="Key"
@ref=Grid
AutoGenerate=true
RowSelectionChanging='RowSelectionChanging'
Data=northwindEmployees>
</IgbHierarchicalGrid>
@code {
private void RowSelectionChanging(IgbRowSelectionEventArgs args)
{
// handler for selection change
}
}
Seleção múltipla
Para habilitar a seleção de várias linhas, IgbHierarchicalGrid
basta definir a RowSelection
propriedade como Multiple
. Isso ativará um campo seletor de linha em cada linha e no IgbHierarchicalGrid
cabeçalho. O seletor de linha permite que os usuários selecionem várias linhas, com a seleção persistindo por meio de operações de rolagem, paginação e dados, como classificação e filtragem. A linha também pode ser selecionada clicando em uma célula ou pressionando a tecla de espaço quando uma célula estiver focada. Se você selecionou uma linha e clicou em outra enquanto mantém pressionada a tecla shift, isso selecionará todo o intervalo de linhas. Neste modo de seleção, quando você clica em uma única linha, as linhas selecionadas anteriormente serão desmarcadas. Se você clicar enquanto segura a tecla ctrl, a linha será alternada e a seleção anterior será preservada.
<IgbHierarchicalGrid Width="100%"
Id="grid"
Height="100%"
RowSelection=GridSelectionMode.Multiple
PrimaryKey="Key"
@ref=Grid
AutoGenerate=true
Data=northwindEmployees>
</IgbHierarchicalGrid>
Notas
- A seleção de linha acionará o evento
RowSelectionChanging
. Este evento fornece informações sobre a nova seleção, a seleção antiga, as linhas que foram adicionadas e removidas da seleção antiga. Além disso, o evento é cancelável, o que permite que você impeça a seleção. - Quando a seleção de linha está habilitada, os seletores de linha são exibidos, mas se você não quiser mostrá-los, você pode definir
HideRowSelectors
como true. - Ao alternar entre os modos de seleção de linha em tempo de execução, isso limpará o estado de seleção de linha anterior.
API usage
Select Rows Programmatically
O trecho de código abaixo pode ser usado para selecionar uma ou várias linhas simultaneamente (via PrimaryKey
). Além disso, o segundo parâmetro desse método é uma propriedade booleana por meio da qual você pode escolher se a seleção de linha anterior será apagada ou não. A seleção anterior é preservada por padrão.
<IgbHierarchicalGrid Width="100%"
Id="grid"
Height="100%"
RowSelection=GridSelectionMode.Multiple
PrimaryKey="Key"
@ref=grid
AutoGenerate=true
Data=northwindEmployees>
</IgbHierarchicalGrid>
<IgbButton @onclick=Select>Select</IgbButton>
@code {
public IgbHierarchicalGrid grid;
private async void Select()
{
object[] array = new object[] { 1,2, 5 };
await this.grid.SelectRowsAsync(array, true);
}
}
Isso adicionará as linhas que correspondem às entradas de dados com IDs 1, 2 e 5 à IgbHierarchicalGrid
seleção.
Deselect Rows
Se você precisar desmarcar linhas programaticamente, poderá usar o método DeselectRows
.
<IgbHierarchicalGrid Width="100%"
Id="grid"
Height="100%"
RowSelection=GridSelectionMode.Multiple
PrimaryKey="Key"
@ref=grid
AutoGenerate=true
Data=northwindEmployees>
</IgbHierarchicalGrid>
<IgbButton @onclick=Deselect>Deselect</IgbButton>
@code {
public IgbHierarchicalGrid grid;
private async void Deselect()
{
object[] array = new object[] { 1, 2, 5 };
await this.grid.DeselectRowsAsync(array);
}
}
Row Selection Event
Quando há alguma alteração na seleção de linha, o evento RowSelectionChanging
é emitido. RowSelectionChanging
expõe os seguintes argumentos:
OldSelection
- matriz de IDs de linha que contém o estado anterior da seleção de linha.NewSelection
- matriz de IDs de linha que correspondem ao novo estado da seleção de linha.Added
- matriz de IDs de linhas que estão atualmente adicionadas à seleção.Removed
- matriz de IDs de linhas que atualmente são removidas de acordo com o antigo estado de seleção.Event
- o evento original que acionou a alteração na seleção de linha.Cancel
- permite impedir a alteração da seleção de linha.
Owner
- Se o evento for acionado a partir de uma grade filho, isso fornecerá uma referência ao componente do qual o evento é emitido.
<IgbHierarchicalGrid Width="100%"
Id="grid"
Height="100%"
RowSelection=GridSelectionMode.Multiple
PrimaryKey="Key"
@ref=Grid
AutoGenerate=true
RowSelectionChanging='RowSelectionChanging'
Data=northwindEmployees>
</IgbHierarchicalGrid>
@code {
private void RowSelectionChanging(IgbRowSelectionEventArgs args)
{
// handler
}
}
Select All Rows
Outro método de API útil que IgbHierarchicalGrid
fornece é SelectAllRows
. Por padrão, esse método selecionará todas as linhas de dados, mas se a filtragem for aplicada, ele selecionará apenas as linhas que correspondem aos critérios de filtro. Se você chamar o método com o parâmetro false, SelectAllRows(false)
sempre selecionará todos os dados na grade, mesmo que a filtragem seja aplicada.
Observação: lembre-se de que
SelectAllRows
não selecionará as linhas que forem excluídas.
Deselect All Rows
IgbHierarchicalGrid
fornece um DeselectAllRows
método que, por padrão, desmarcará todas as linhas de dados, mas se a filtragem for aplicada, desmarcará apenas as linhas que correspondem aos critérios de filtro. Se você chamar o método com o parâmetro false, sempre limpará todo o estado de seleção de linha, DeselectAllRows(false)
mesmo que a filtragem seja aplicada.
How to get Selected Rows
Se precisar ver quais linhas estão selecionadas no momento, você pode obter seus IDs de linha com o getter SelectedRows
.
<IgbHierarchicalGrid Width="100%"
Id="grid"
Height="100%"
RowSelection=GridSelectionMode.Multiple
PrimaryKey="Key"
@ref=grid
AutoGenerate=true
Data=northwindEmployees>
</IgbHierarchicalGrid>
<IgbButton @onclick=GetSelected>Get selected</IgbButton>
@code {
public IgbHierarchicalGrid grid;
private async void GetSelected()
{
var selected = this.grid.SelectedRows;
}
}
Além disso, atribuir IDs de linha a SelectedRows
permitirá que você altere o estado de seleção da grade.
<IgbHierarchicalGrid Width="100%"
Id="grid"
Height="100%"
RowSelection=GridSelectionMode.Multiple
PrimaryKey="Key"
SelectedRows=selectedRows
@ref=Grid
AutoGenerate=true
Data=northwindEmployees>
</IgbHierarchicalGrid>
@code {
public object[] selectedRows = new object[] { 1, 2, 5 };
}
Row Selector Templates
Você pode modelar seletores de cabeçalho e linha no IgbHierarchicalGrid
e também acessar seus contextos que fornecem funcionalidade útil para diferentes cenários.
Por padrão, o lida IgbHierarchicalGrid
com todas as interações de seleção de linha no contêiner pai do seletor de linha ou na própria linha, deixando apenas a visualização de estado para o modelo. A substituição da funcionalidade base geralmente deve ser feita usando o evento RowSelectionChanging. Caso você implemente um modelo personalizado com um Click
manipulador que substitui a funcionalidade base, você deve interromper a propagação do evento para preservar o estado de linha correto.
Modelo de linha
Para criar um modelo de seletor de linha personalizado, você IgbHierarchicalGrid
pode usar a RowSelectorTemplate
propriedade. No modelo, você pode acessar a variável de contexto fornecida implicitamente, com propriedades que fornecem informações sobre o estado da linha.
A propriedade selected
mostra se a linha atual está selecionada ou não, enquanto a propriedade index
pode ser usada para acessar o índice da linha.
igRegisterScript("WebGridRowSelectorTemplate", (ctx) => {
var html = window.igTemplating.html;
if (ctx.implicit.selected) {
return html`<div style="justify-content: space-evenly;display: flex;width: 70px;">
<span> ${ctx.implicit.index}</span>
<igc-checkbox checked></igc-checkbox>
</div>`;
} else {
return html`<div style="justify-content: space-evenly;display: flex;width: 70px;">
<span> ${ctx.implicit.index}</span>
<igc-checkbox></igc-checkbox>
</div>`;
}
}, false);
A rowID
propriedade pode ser usada para obter uma referência de uma IgbHierarchicalGrid
linha. Isso é útil quando você implementa um click
manipulador no elemento seletor de linha.
No exemplo acima, estamos usando um IgbCheckbox
e vinculamos rowContext.selected
à sua propriedade checked
. Veja isso em ação em nossa Demonstração de Numeração de Linhas.
[!Note] The
rowContext.select()
androwContext.deselect()
methods are exposed in the template context of anIgbHierarchicalGrid
. They make it easier to toggle the current row, especially in a child grid, when you implement a click handler that overrides the base functionality.
Header Template
Para criar um modelo de seletor de cabeçalho personalizado, dentro do IgbHierarchicalGrid
, você pode usar a HeadSelectorTemplate
propriedade. No modelo, você pode acessar a variável de contexto fornecida implicitamente, com propriedades que fornecem informações sobre o estado do cabeçalho.
O SelectedCount
mostra quantas linhas estão selecionadas no momento enquanto totalCount
mostra quantas linhas existem no IgbHierarchicalGrid
no total.
public RenderFragment<IgbHeadSelectorTemplateContext> Template = (context) =>
{
return @<div> <img style="min-width:80px;" src="https://pt-br.infragistics.com/angular-demos-lob/assets/images/card/avatars/igLogo.png"/></div>;
};
As propriedades SelectedCount
e TotalCount
podem ser usadas para determinar se o seletor principal deve ser verificado ou indeterminado (parcialmente selecionado).
Cada nível de hierarquia em um IgbHierarchicalGrid
pode ter sua própria modelagem de linha e cabeçalho.
[!Note] The
headContext.selectAll()
andheadContext.deselectAll()
methods are exposed in the template context of anIgbHierarchicalGrid
. They make it easier to toggle all rows, especially in a child grid, when you implement a click handler that overrides the base functionality.
Row Numbering Demo
Esta demonstração mostra o uso de seletores de cabeçalho e linha personalizados. O último usa Index
para exibir números de linha e um IgbCheckbox
vinculado a Selected
.
Conditional Selection Demo
Esta demonstração impede que algumas linhas sejam selecionadas usando o evento RowSelectionChanging
e um modelo personalizado com caixa de seleção desabilitada para linhas não selecionáveis.
API References
IgbHierarchicalGrid
HierarchicalGridRow
Cell
Additional Resources
Nossa comunidade é ativa e sempre acolhedora para novas ideias.