Angular Fixação de linha de grade
Uma ou várias linhas podem ser fixadas na parte superior ou inferior da grade da interface do usuário do Angular. A fixação de linha no Ignite UI for Angular permite que os usuários finais fixem linhas em uma ordem específica, duplicando-as em uma área especial que está sempre visível, mesmo quando rolam a grade verticalmente. A grade da interface do usuário do material tem uma interface de usuário de fixação de linha integrada, que é ativada inicializando um igxActionStrip
componente no contexto da grade. Além disso, você pode definir a interface do usuário personalizada e alterar o estado do pino das linhas por meio da API de fixação de linha.
Angular Grid Row Pinning Example
Row Pinning UI
A interface do usuário de fixação de linha interna é habilitada adicionando um igxActionStrip
componente com o GridPinningActions
componente. A faixa de ação é mostrada automaticamente ao passar o mouse sobre uma linha e exibirá um ícone de botão de fixar ou desafixar com base no estado da linha para a qual ela é mostrada. Uma ação adicional que permite rolar a cópia da linha fixada para a exibição também é mostrada para cada linha fixada.
<igx-grid [data]="data" [autoGenerate]="false">
<igx-column *ngFor="let c of columns" [field]="c.field" [header]="c.field">
</igx-column>
<igx-action-strip #actionStrip>
<igx-grid-pinning-actions></igx-grid-pinning-actions>
<igx-grid-editing-actions></igx-grid-editing-actions>
</igx-action-strip>
</igx-grid>
Row Pinning API
A fixação de linha é controlada por meio da pinned
entrada do row
. As linhas fixadas são renderizadas na parte superior da grade por padrão e permanecem fixas por meio da rolagem vertical das linhas não afixadas no corpo da grade.
this.grid.getRowByIndex(0).pinned = true;
Você também pode usar os Grid's pinRow
ou unpinRow
métodos do IgxGridComponent
para fixar ou desafixar registros por seu ID:
this.grid.pinRow('ALFKI');
this.grid.unpinRow('ALFKI');
Observe que a ID da linha é o valor da chave primária, definido pela grade ou pela primaryKey
própria instância do registro. Ambos os métodos retornam um valor booleano indicando se sua respectiva operação foi bem-sucedida ou não. Normalmente, o motivo pelo qual eles falham é que a linha já está no estado desejado.
Uma linha é fixada abaixo da última linha fixada. A alteração da ordem das linhas fixadas pode ser feita assinando o rowPinning
evento e alterando a insertAtIndex
propriedade dos argumentos do evento para o índice de posição desejado.
<igx-grid #grid1 [data]="data" [autoGenerate]="true" (rowPinning)="rowPinning($event)">
</igx-grid>
public rowPinning(event) {
event.insertAtIndex = 0;
}
Pinning Position
Você pode alterar a posição de fixação da linha por meio da pinning
opção de configuração. Ele permite que você defina a posição da área do pino como Superior ou Inferior. Quando definido como Inferior, as linhas fixadas são renderizadas na parte inferior da grade, após as linhas desafixadas. As linhas não afixadas podem ser roladas verticalmente, enquanto as linhas fixadas permanecem fixas na parte inferior.
<igx-grid [data]="data" [autoGenerate]="true" [pinning]="pinningConfig"></igx-grid>
public pinningConfig: IPinningConfig = { rows: RowPinningPosition.Bottom };
Custom Row Pinning UI
Você pode definir sua interface do usuário personalizada e alterar o estado do pino das linhas por meio da API relacionada.
Via extra column with icon
Digamos que, em vez de uma faixa de ação, você gostaria de mostrar um ícone de alfinete em cada linha, permitindo que o usuário final clique e altere o estado do alfinete de uma linha específica. Isso pode ser feito adicionando uma coluna extra com um modelo de célula contendo o ícone personalizado.
<igx-grid [data]="data" [primaryKey]="'ID'" [autoGenerate]="false">
<igx-column width="70px">
<ng-template igxCell let-cell="cell" let-val>
<igx-icon class="pin-icon" (mousedown)="togglePinning(cell.row, $event)">
{{cell.row.pinned ? 'lock' : 'lock_open'}}
</igx-icon>
</ng-template>
</igx-column>
<igx-column *ngFor="let c of columns" [field]="c.field" [header]="c.field">
</igx-column>
</igx-grid>
Ao clicar no ícone personalizado, o estado do pino da linha relacionada pode ser alterado usando os métodos de API da linha.
public togglePinning(row: IgxGridRow, event) {
event.preventDefault();
if (row.pinned) {
row.unpin();
} else {
row.pin();
}
}
Demo
Via row drag
Digamos que você queira arrastar e soltar diretamente uma linha entre as linhas fixadas e desafixadas para alterar seu estado de fixação. Isso pode ser feito ativando o recurso de arrastar linha e fixando/desafixando as linhas por meio da API ao soltar.
Primeiro, a grade deve ser marcada como uma área de soltar usando a igxDrop
diretiva e a funcionalidade de arrastar linha deve ser habilitada por meio da rowDraggable
opção.
<igx-grid [data]="data" [autoGenerate]="true" [rowDraggable]="true"
[primaryKey]="'ID'" igxDrop (dropped)="onDropAllowed($event)">
</igx-grid>
Em seguida, o dropped
evento pode ser usado para lidar com a lógica de reordenação e fixação/desafixação.
public onDropAllowed(args) {
const event = args.originalEvent;
let currRowPinnedIndex;
const currRowIndex = this.getCurrentRowIndex(this.grid.rowList.toArray(),
{ x: event.clientX, y: event.clientY });
if (currRowIndex === -1) { return; }
const currRowID = this.getCurrentRowID(this.grid.rowList.toArray(),
{ x: event.clientX, y: event.clientY });
const currentRow = this.grid.rowList.toArray().find((r) => r.rowID === currRowID);
if (currentRow.pinned) {
currRowPinnedIndex = this.grid.pinnedRows.indexOf(this.grid.pinnedRows.find((r) => r.rowID === currRowID));
}
// remove the row that was dragged and place it onto its new location
this.grid.deleteRow(args.dragData.key);
this.data.splice(currRowIndex, 0, args.dragData.data);
if (currentRow.pinned && !args.dragData.pinned) {
this.grid.pinRow(args.dragData.key, currRowPinnedIndex);
} else if (!currentRow.pinned && args.dragData.pinned) {
this.grid.unpinRow(args.dragData.key);
} else if (currentRow.pinned && args.dragData.pinned) {
this.grid.unpinRow(args.dragData.key);
this.grid.pinRow(args.dragData.key, currRowPinnedIndex);
}
}
Isso permitiria reordenar as linhas e movê-las entre as coleções de linhas fixadas e não afixadas.
Demo
Row Pinning Limitations
- Somente os registros existentes na fonte de dados podem ser fixados.
- O estado de fixação de linha não é exportado para o Excel. A grade é exportada como se nenhuma fixação de linha fosse aplicada.
- Devido à forma como as linhas fixadas são armazenadas internamente para que possam aparecer nas áreas fixadas e não afixadas da grade, não há suporte para a fixação de linha quando os registros na grade são buscados de um ponto de extremidade remoto sob demanda (virtualização remota).
- As cópias de linhas fixadas na área rolável da grade são parte integrante de como outros recursos de grade alcançam sua funcionalidade na presença de linhas fixadas e, portanto, sua criação não pode ser desabilitada nem removida.
- Como a Seleção de linha funciona inteiramente com IDs de linha, a seleção de linhas fixadas também seleciona suas cópias (e vice-versa). Além disso, a seleção de intervalo (por exemplo, usando Shift + clique) na área fixada funciona da mesma maneira que a seleção de um intervalo de linhas na área rolável. A seleção resultante inclui todas as linhas intermediárias, mesmo que elas não estejam fixadas no momento. Obter as linhas selecionadas por meio da API retorna apenas uma única instância de cada registro selecionado.
- Quando a grade não tiver nenhuma
primaryKey
configuração e os cenários de dados remotos estiverem habilitados (ao paginar, classificar, filtrar, rolar solicitações de gatilho para um servidor remoto para recuperar os dados a serem exibidos na grade), uma linha perderá o seguinte estado após a conclusão de uma solicitação de dados:- Seleção de linha
- Expandir/recolher linha
- Edição de linha
- Fixação de linha
Estilização
O IgxGrid permite estilizar através do Ignite UI for Angular Theme Library
. O Grid grid-theme
expõe uma grande variedade de propriedades, que permitem a personalização de todos os recursos do Grid.
Abaixo, estamos seguindo as etapas de personalização do estilo de fixação de linha do Grid.
Importing the Styling Library
Para iniciar a personalização do recurso de fixação de linha, você precisa importar o index
arquivo, onde todas as funções de estilo e mixins estão localizados.
@use "igniteui-angular/theming" as *;
// IMPORTANT: Prior to Ignite UI for Angular version 13 use:
// @import '~igniteui-angular/lib/core/styles/themes/index';
Defining a Theme
Em seguida, crie um novo tema, que estenda e grid-theme
aceite os parâmetros, necessários para personalizar o recurso de fixação de linha conforme desejado.
$custom-grid-theme: grid-theme(
$pinned-border-width: 5px,
$pinned-border-style: double,
$pinned-border-color: #ffcd0f,
$cell-active-border-color: #ffcd0f
);
Using CSS variables
A última etapa é passar o tema de grade personalizado:
@include css-vars($custom-grid-theme);
Demo
Note
A amostra não será afetada Change Theme
pelo tema global selecionado.
API References
- Componente IgxGridIgx
- IgxGridRow
- IgxTreeGridRow
- IgxHierarchicalGridRow
- Tipo de linha
- Estilos IgxGridComponent
Additional Resources
- Visão geral da grade
- Virtualização e desempenho
- Paginação
- Filtragem
- Classificação
- Resumos
- Movimentação de Colunas
- Redimensionamento de colunas
- Escolha