Resumos de grade Angular

    A grade da interface do usuário do Angular em Ignite UI for Angular tem um recurso de resumos que funciona em um nível por coluna como rodapé de grupo. Angular resumos de grade é um recurso poderoso que permite ao usuário ver as informações da coluna em um contêiner separado com um conjunto predefinido de itens de resumo padrão, dependendo do tipo de dados dentro da coluna ou implementando um modelo angular personalizado na grade.

    Angular Grid Summaries Overview Example

    Note

    O resumo da coluna é uma função de todos os valores de coluna, a menos que a filtragem seja aplicada, o resumo da coluna será função dos valores de resultado filtrados

    Os resumos de grade também podem ser ativados em um nível por coluna no Ignite UI for Angular, o que significa que você pode ativá-lo apenas para as colunas necessárias. Os resumos de grade fornecem um conjunto predefinido de resumos padrão, dependendo do tipo de dados na coluna, para que você possa economizar algum tempo:

    Para string e boolean data types, a seguinte função está disponível:

    • contar

    Para number e currency​ ​percent tipos de dados, as seguintes funções estão disponíveis:

    • contar
    • mínimo
    • máx.
    • média
    • soma

    Para date o tipo de dados, as seguintes funções estão disponíveis:

    • contar
    • mais cedo
    • mais recente

    Todos os tipos de dados de coluna disponíveis podem ser encontrados no tópico oficial Tipos de coluna.

    Os resumos de grade são habilitados por coluna definindo hasSummary a propriedade como true. Também é importante ter em mente que os resumos de cada coluna são resolvidos de acordo com o tipo de dados da coluna. igx-grid No tipo de dados da coluna padrão é string, portanto, se você quiser number resumos date específicos, especifique a dataType propriedade como number ou date. Observe que os valores resumidos serão exibidos localizados, de acordo com a grade locale e a coluna pipeArgs.

    <igx-grid #grid1 [data]="data" [autoGenerate]="false" height="800px" width="800px" (columnInit)="initColumn($event)">
        <igx-column field="ProductID" header="Product ID" width="200px" [sortable]="true"></igx-column>
        <igx-column field="ProductName" header="Product Name" width="200px" [sortable]="true" [hasSummary]="true"></igx-column>
        <igx-column field="ReorderLevel" width="200px" [editable]="true" [dataType]="'number'" [hasSummary]="true"></igx-column>
    </igx-grid>
    

    A outra maneira de ativar/desativar resumos para uma coluna específica ou uma lista de colunas é usar o método enableSummaries público/ disableSummaries do igx-grid.

    <igx-grid #grid1 [data]="data" [autoGenerate]="false" height="800px" width="800px" (columnInit)="initColumn($event)" >
        <igx-column field="ProductID" header="Product ID" width="200px"  [sortable]="true"></igx-column>
        <igx-column field="ProductName" header="Product Name" width="200px" [sortable]="true" [hasSummary]="true"></igx-column>
        <igx-column field="ReorderLevel" width="200px" [editable]="true" [dataType]="'number'" [hasSummary]="false"></igx-column>
    </igx-grid>
    <button (click)="enableSummary()">Enable Summary</button>
    <button (click)="disableSummary()">Disable Summary </button>
    
    public enableSummary() {
        this.grid1.enableSummaries([
            {fieldName: 'ReorderLevel', customSummary: this.mySummary},
            {fieldName: 'ProductID'}
        ]);
    }
    public disableSummary() {
        this.grid1.disableSummaries('ProductName');
    }
    

    Custom Grid Summaries

    Se essas funções não atenderem aos seus requisitos, você poderá fornecer um resumo personalizado para as colunas específicas. Para conseguir isso, IgxNumberSummaryOperand você deve substituir uma das classes IgxSummaryOperand base ou IgxDateSummaryOperand de acordo com o tipo de dados da coluna e suas necessidades. Dessa forma, você pode redefinir a função existente ou adicionar novas funções. IgxSummaryOperand classe fornece a implementação padrão apenas para o count método. IgxNumberSummaryOperand estende IgxSummaryOperand e fornece implementação para o min, max, sum e average. IgxDateSummaryOperand estende IgxSummaryOperand e, adicionalmente, dá-lhe earliest e latest.

    import { IgxSummaryResult, IgxSummaryOperand, IgxNumberSummaryOperand, IgxDateSummaryOperand } from 'igniteui-angular';
    // import { IgxSummaryResult, IgxSummaryOperand, IgxNumberSummaryOperand, IgxDateSummaryOperand } from '@infragistics/igniteui-angular'; for licensed package
    
    class MySummary extends IgxNumberSummaryOperand {
        constructor() {
            super();
        }
    
        operate(data?: any[]): IgxSummaryResult[] {
            const result = super.operate(data);
            result.push({
                key: 'test',
                label: 'Test',
                summaryResult: data.filter(rec => rec > 10 && rec < 30).length
            });
            return result;
        }
    }
    

    Como visto nos exemplos, as classes base expõem o operate método, portanto, você pode optar por obter todos os resumos padrão e modificar o resultado ou calcular resultados de resumo totalmente novos. O método retorna uma lista de IgxSummaryResult.

    interface IgxSummaryResult {
        key: string;
        label: string;
        summaryResult: any;
    }
    

    e tomar parâmetros opcionais para calcular os resumos. Consulte a seção Resumos personalizados, que acessam todos os dados abaixo.

    Note

    Para calcular a altura da linha de resumo corretamente, o Grid precisa que o operate método sempre retorne uma matriz com IgxSummaryResult o comprimento adequado, mesmo quando os dados estão vazios.

    E agora vamos adicionar nosso resumo personalizado à coluna UnitsInStock. Conseguiremos isso definindo a summaries propriedade para a classe que criamos abaixo.

    <igx-grid #grid1 [data]="data" [autoGenerate]="false" height="800px" width="800px" (columnInit)="initColumn($event)" >
        <igx-column field="ProductID" width="200px"  [sortable]="true">
        </igx-column>
        <igx-column field="ProductName" width="200px" [sortable]="true" [hasSummary]="true">
        </igx-column>
        <igx-column field="UnitsInStock" width="200px" [dataType]="'number'" [hasSummary]="true" [summaries]="mySummary" [sortable]="true">
        </igx-column>
        <igx-column field="ReorderLevel" width="200px" [editable]="true" [dataType]="'number'" [hasSummary]="true">
        </igx-column>
    </igx-grid>
    
    ...
    export class GridComponent implements OnInit {
        mySummary = MySummary;
        ....
    }
    

    Custom summaries, which access all data

    Agora você pode acessar todos os dados do Grid dentro do resumo da coluna personalizada. Dois parâmetros opcionais adicionais são introduzidos no método IgxSummaryOperand operate. Como você pode ver no trecho de código abaixo, o método operate tem os três parâmetros a seguir:

    • columnData - fornece uma matriz que contém os valores apenas para a coluna atual
    • allGridData - fornece a fonte de dados da grade completa
    • fieldName - campo da coluna atual
    class MySummary extends IgxNumberSummaryOperand {
        constructor() {
            super();
        }
        operate(columnData: any[], allGridData = [], fieldName?): IgxSummaryResult[] {
            const result = super.operate(allData.map(r => r[fieldName]));
            result.push({ key: 'test', label: 'Total Discontinued', summaryResult: allData.filter((rec) => rec.Discontinued).length });
            return result;
        }
    }
    

    Summary Template

    igxSummary Direciona o resumo da coluna fornecendo como contexto os resultados do resumo da coluna.

    <igx-column ... [hasSummary]="true">
        <ng-template igxSummary let-summaryResults>
            <span> My custom summary template</span>
            <span>{{ summaryResults[0].label }} - {{ summaryResults[0].summaryResult }}</span>
        </ng-template>
    </igx-column>
    

    Quando um resumo padrão é definido, a altura da área de resumo é calculada por design, dependendo da coluna com o maior número de resumos e do tamanho da grade. Use a propriedade de entrada summaryRowHeight para substituir o valor padrão. Como argumento, ele espera um valor numérico e definir um valor falso acionará o comportamento de dimensionamento padrão do rodapé da grade.

    Note

    O modelo de resumo de coluna pode ser definido por meio da API definindo a propriedade summaryTemplate da coluna como o TemplateRef necessário.

    Disable Summaries

    A disabledSummaries propriedade fornece controle preciso por coluna sobre o recurso de resumo da grade Ignite UI for Angular. Essa propriedade permite que os usuários personalizem os resumos exibidos para cada coluna na grade, garantindo que apenas os dados mais relevantes e significativos sejam mostrados. Por exemplo, você pode excluir tipos de resumo específicos, por exemplo ['count', 'min', 'max'], especificando suas chaves de resumo em uma matriz.

    Essa propriedade também pode ser modificada dinamicamente em tempo de execução por meio de código, fornecendo flexibilidade para adaptar os resumos da grade às mudanças nos estados do aplicativo ou nas ações do usuário.

    Os exemplos a seguir ilustram como usar a disabledSummaries propriedade para gerenciar resumos de colunas diferentes e excluir tipos de resumo padrão e personalizados específicos na grade Ignite UI for Angular:

    <!-- default summaries -->
    <igx-column
        field="UnitPrice"
        header="Unit Price"
        dataType="number"
        [hasSummary]="true"
        [disabledSummaries]="['count', 'sum', 'average']"
    >
    </igx-column>
    <!-- custom summaries -->
    <igx-column
        field="UnitsInStock"
        header="Units In Stock"
        dataType="number"
        [hasSummary]="true"
        [summaries]="discontinuedSummary"
        [disabledSummaries]="['discontinued', 'totalDiscontinued']"
    >
    </igx-column>
    

    Pois UnitPrice, resumos padrão como count, sum e average são desativados, deixando outros como min e max ativos.

    Para UnitsInStock, resumos personalizados, como total e totalDiscontinued são excluídos usando a disabledSummaries propriedade.

    Em tempo de execução, os resumos também podem ser desabilitados dinamicamente usando a disabledSummaries propriedade. Por exemplo, você pode definir ou atualizar a propriedade em colunas específicas programaticamente para adaptar os resumos exibidos com base nas ações do usuário ou nas alterações de estado do aplicativo.

    Formatting summaries

    Por padrão, os resultados do resumo, produzidos pelos operandos de resumo integrados, são localizados e formatados de acordo com a grade locale e a coluna pipeArgs. Ao usar operandos personalizados, os locale e pipeArgs não são aplicados. Se você quiser alterar a aparência padrão dos resultados do resumo, poderá formatá-los usando a summaryFormatter propriedade.

    public dateSummaryFormat(summary: IgxSummaryResult, summaryOperand: IgxSummaryOperand): string {
        const result = summary.summaryResult;
        if(summaryOperand instanceof IgxDateSummaryOperand && summary.key !== 'count'
            && result !== null && result !== undefined) {
            const pipe = new DatePipe('en-US');
            return pipe.transform(result,'MMM YYYY');
        }
        return result;
    }
    
    <igx-column ... [summaryFormatter]="dateSummaryFormat"></igx-column>
    

    Summaries with Group By

    Quando você agrupa por colunas, a Grade permite alterar a posição do resumo e o modo de cálculo usando as summaryCalculationMode propriedades e summaryPosition. Junto com essas duas propriedades, o IgxGrid expõe e showSummaryOnCollapse a propriedade que permite determinar se a linha de resumo permanece visível quando a linha de grupo a que se refere é recolhida.

    Os valores disponíveis do summaryCalculationMode imóvel são:

    • rootLevelOnly - Os resumos são calculados apenas para o nível raiz.
    • childLevelsOnly - Os resumos são calculados apenas para os níveis filho.
    • rootAndChildLevels - Resumos são calculados para níveis raiz e filho. Este é o valor padrão.

    Os valores disponíveis do summaryPosition imóvel são:

    • topo - A linha de resumo aparece antes dos filhos da linha agrupada.
    • inferior - A linha de resumo aparece depois do grupo por linha filhos. Este é o valor padrão.

    A showSummaryOnCollapse propriedade é booleana. Seu valor padrão é definido como false, o que significa que a linha de resumo ficaria oculta quando a linha do grupo fosse recolhida. Se a propriedade for definida como true, a linha de resumo permanecerá visível quando a linha do grupo for recolhida.

    Note

    A summaryPosition propriedade se aplica somente aos resumos de nível filho. Os resumos de nível raiz aparecem sempre fixos na parte inferior da grade.

    Demo

    Exporting Summaries

    Há uma exportSummaries opção que IgxExcelExporterOptions especifica se os dados exportados devem incluir os resumos da grade. O valor padrão exportSummaries é false.

    O IgxExcelExporterService exportará os resumos padrão para todos os tipos de coluna como suas funções equivalentes do Excel para que continuem funcionando corretamente quando a planilha for modificada. Experimente você mesmo no exemplo abaixo:

    O arquivo exportado inclui uma coluna oculta que contém o nível de cada um DataRecord na planilha. Esse nível é usado nos resumos para filtrar as células que precisam ser incluídas na função de resumo.

    Na tabela abaixo, você pode encontrar a fórmula do Excel correspondente para cada um dos resumos padrão.

    Tipo de dados Função Função Excel
    string, boolean contar ="Contagem: "&CONT.SE(início:fim, recordLevel)
    number, currency, percent contar ="Contagem: "&CONT.SE(início:fim, recordLevel)
    mínimo ="Min: "&MIN(IF(start:end=recordLevel, rangeStart:rangeEnd))
    máx. ="Máx: "&MÁX(SE(início:fim=nível_de_registro, início_do_intervalo:fim_do_intervalo))
    média ="Média: "&MÉDIASE(início:fim, nível do registro, início do intervalo: fim do intervalo)
    soma ="Soma: "&SOMA.SE(início:fim, nível do registro, início do intervalo: fim do intervalo)
    date contar ="Contagem: "&CONT.SE(início:fim, recordLevel)
    mais cedo ="Mais antigo: "& TEXTO(MIN(SE(início:fim=nível_de_registro, início_do_intervalo:fim_do_intervalo)), formato)
    mais recente ="Último: "&TEXTO(MÁXIMO(SE(início:fim=nível_de_registro, início_do_intervalo:fim_do_intervalo)), formato)

    Known Limitations

    Limitação Descrição
    Exportando resumos personalizados Resumos personalizados serão exportados como strings em vez de funções do Excel.
    Exportando resumos com modelos Resumos com modelos não são suportados e serão exportados como os padrões.

    Keyboard Navigation

    As linhas de resumo podem ser navegadas com as seguintes interações de teclado:

    • UP- navega uma célula para cima
    • DOWN- navega uma célula para baixo
    • LEFT- navega uma célula à esquerda
    • RIGHT- navega uma célula para a direita
    • CTRL + LEFT ou HOME- navega para a célula mais à esquerda
    • CTRL + RIGHT ou END- navega para a célula mais à direita

    Estilização

    Para começar a estilizar o comportamento de classificação, precisamos importar o index arquivo, onde todas as funções do tema e mixins de componentes residem:

    @use "igniteui-angular/theming" as *;
    
    // IMPORTANT: Prior to Ignite UI for Angular version 13 use:
    // @import '~igniteui-angular/lib/core/styles/themes/index';
    

    Seguindo a abordagem mais simples, criamos um novo tema que estende os grid-summary-theme parâmetros e aceita os $background-color parâmetros, $focus-background-color, $label-color, $result-color,, $pinned-border-width,. $pinned-border-style​ ​$pinned-border-color

    $custom-theme: grid-summary-theme(
      $background-color: #e0f3ff,
      $focus-background-color: rgba(#94d1f7, .3),
      $label-color: #e41c77,
      $result-color: black,
      $pinned-border-width: 2px,
      $pinned-border-style: dotted,
      $pinned-border-color: #e41c77
    );
    
    Note

    Em vez de codificar os valores de cor como acabamos de fazer, podemos obter maior flexibilidade em termos de cores usando as palette funções e color. Consulte o Palettes tópico para obter orientações detalhadas sobre como usá-los.

    A última etapa é incluir o tema personalizado do componente:

    @include css-vars($custom-theme);
    
    Note

    Se o componente estiver usando um Emulated ViewEncapsulation, é necessário penetrate neste encapsulamento usando::ng-deep:

    :host {
     ::ng-deep {
       @include css-vars($custom-theme);
     }
    }
    

    Demo

    API References

    Additional Resources

    Nossa comunidade é ativa e sempre acolhedora para novas ideias.