Resúmenes de cuadrículas Angular

    La cuadrícula de la interfaz de usuario de Angular en Ignite UI for Angular tiene una característica de resúmenes que funciona en un nivel por columna como pie de página de grupo. Angular resúmenes de cuadrícula es una característica poderosa que permite al usuario ver la información de la columna en un contenedor separado con un conjunto predefinido de elementos de resumen predeterminados, según el tipo de datos dentro de la columna o mediante la implementación de una plantilla angular personalizada en la cuadrícula.

    Angular Grid Summaries Overview Example

    Note

    El resumen de la columna es una función de todos los valores de la columna; a menos que se aplique un filtrado, el resumen de la columna será función de los valores de los resultados filtrados.

    Los resúmenes de cuadrícula también se pueden habilitar a nivel de columna en Ignite UI for Angular, lo que significa que solo puede activarlos para las columnas que necesite. Resúmenes de cuadrícula le proporciona un conjunto predefinido de resúmenes predeterminados, en función del tipo de datos de la columna, para que pueda ahorrar algo de tiempo:

    Parastring yboolean data types está disponible la siguiente función:

    • contar

    Paranumber ycurrencypercent tipos de datos, están disponibles las siguientes funciones:

    • contar
    • mín.
    • máximo
    • promedio
    • suma

    Para eldate tipo de dato, están disponibles las siguientes funciones:

    • contar
    • más temprano
    • el último

    Todos los tipos de datos de columna disponibles se pueden encontrar en el tema oficial Tipos de columna.

    Los resúmenes de cuadrícula están habilitados por columna estableciendohasSummary la propiedad entrue. También es importante tener en cuenta que los resúmenes de cada columna se resuelven según el tipo de dato de columna. En laigx-grid columna predeterminada el tipo de dato esstring, así que si quieresnumber resúmenesdate específicos deberías especificar ladataType propiedad comonumber odate. Ten en cuenta que los valores resumen se mostrarán localizados, según la cuadrículalocale y la columnapipeArgs.

    <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>
    

    La otra forma de activar/desactivar resúmenes para una columna específica o una lista de columnas es usar el métodoenableSummaries público/disableSummaries de la cuadrícula igx.

    <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

    Si estas funciones no cumplen con tus requisitos, puedes proporcionar un resumen personalizado para las columnas específicas. Para lograr esto tienes que sobrescribir una de las clasesIgxSummaryOperand base,IgxNumberSummaryOperand oIgxDateSummaryOperand según el tipo de dato de columna y tus necesidades. De esta manera puedes redefinir la función existente o añadir nuevas funciones.IgxSummaryOperand Class proporciona la implementación predeterminada solo para elcount método.IgxNumberSummaryOperand extiendeIgxSummaryOperand y proporciona implementación para elmin,max,sum yaverage.IgxDateSummaryOperand extiendeIgxSummaryOperand y además teearliest da y.latest

    import { IgxSummaryResult, IgxSummaryOperand, IgxNumberSummaryOperand, IgxDateSummaryOperand } from 'igniteui-angular/core';
    // 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 se ve en los ejemplos, las clases base exponen eloperate método, así que puedes elegir obtener todos los resúmenes por defecto y modificar el resultado, o calcular resultados de resumen completamente nuevos. El método devuelve una lista deIgxSummaryResult.

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

    y tomar parámetros opcionales para calcular los resúmenes. Consulte Resúmenes personalizados, que acceden a toda la sección de datos a continuación.

    Note

    Para calcular correctamente la altura de la fila resumen, la Cuadrícula necesita que eloperate método siempre devuelva un array deIgxSummaryResult con la longitud adecuada incluso cuando los datos están vacíos.

    Y ahora vamos a añadir nuestro resumen personalizado a la columnaUnitsInStock. Lo lograremos asignando lasummaries propiedad a la clase que creamos a continuación.

    <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

    Ahora puedes acceder a todos los datos de Grid dentro del resumen personalizado de columnas. Se introducen dos parámetros opcionales adicionales en el método IgxSummaryOperandoperate. Como puedes ver en el fragmento de código de abajo, el método de operación tiene los siguientes tres parámetros:

    • columnData: le proporciona una matriz que contiene los valores solo para la columna actual
    • allGridData: le brinda toda la fuente de datos de la cuadrícula
    • fieldName - campo de columna actual
    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

    igxSummaryApunta al resumen de columnas proporcionando como contexto los resultados del resumen de columna.

    <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>
    

    Cuando se define un resumen predeterminado, la altura del área de resumen se calcula por diseño en función de la columna con el mayor número de resúmenes y el tamaño de la cuadrícula. Use la propiedad de entrada summaryRowHeight para invalidar el valor predeterminado. Como argumento, espera un valor numérico y, al establecer un valor falso, se activará el comportamiento de tamaño predeterminado del pie de página de la cuadrícula.

    Note

    La plantilla de resumen de columna se puede definir a través de API estableciendo la propiedad SummaryTemplate de la columna en el TemplateRef requerido.

    Disable Summaries

    LadisabledSummaries propiedad proporciona un control preciso por columna sobre la función de resumen de la cuadrícula Ignite UI for Angular. Esta propiedad permite a los usuarios personalizar los resúmenes mostrados para cada columna de la cuadrícula, asegurando que solo se muestren los datos más relevantes y significativos. Por ejemplo, puedes excluir tipos específicos de resumen, por ejemplo['count', 'min', 'max'], especificando sus claves de resumen en un array.

    Esta propiedad también se puede modificar dinámicamente en tiempo de ejecución a través del código, lo que proporciona flexibilidad para adaptar los resúmenes de la cuadrícula a los cambios en los estados de la aplicación o las acciones del usuario.

    Los siguientes ejemplos ilustran cómo utilizar ladisabledSummaries propiedad para gestionar resúmenes de diferentes columnas y excluir tipos específicos de resúmenes predeterminados y personalizados en la cuadrícula de 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>
    

    PorqueUnitPrice, los resúmenes por defecto comocount,sum, yaverage están deshabilitados, dejando a otros comomin ymax activos.

    ParaUnitsInStock esto, los resúmenes personalizados comototal ytotalDiscontinued se excluyen usando ladisabledSummaries propiedad.

    En tiempo de ejecución, los resúmenes también pueden desactivarse dinámicamente usando estadisabledSummaries propiedad. Por ejemplo, puedes establecer o actualizar la propiedad en columnas específicas de forma programática para adaptar los resúmenes mostrados según acciones del usuario o cambios en el estado de la aplicación.

    Formatting summaries

    Por defecto, los resultados resumen, producidos por los operandos de resumen integrados, se localizan y formatean según la cuadrículalocale y la columnapipeArgs. Al usar operandos personalizados, loslocale ypipeArgs no se aplican. Si quieres cambiar la apariencia predeterminada de los resultados resumen, puedes formatearlos usando lasummaryFormatter propiedad.

    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

    Cuando has agrupado por columnas, la Cuadrícula te permite cambiar la posición de resumen y el modo de cálculo usando lassummaryCalculationMode propiedades ysummaryPosition. Junto con estas dos propiedades, expone IgxGrid yshowSummaryOnCollapse una propiedad que permite determinar si la fila resumen permanece visible cuando se colapsa la fila del grupo a la que se refiere.

    Los valores disponibles de lasummaryCalculationMode propiedad son:

    • rootLevelOnly: los resúmenes se calculan solo para el nivel raíz.
    • childLevelsOnly: los resúmenes se calculan solo para los niveles secundarios.
    • rootAndChildLevels: los resúmenes se calculan tanto para el nivel raíz como para el nivel secundario. Este es el valor predeterminado.

    Los valores disponibles de lasummaryPosition propiedad son:

    • arriba: la fila de resumen aparece antes del grupo por fila secundaria.
    • abajo: la fila de resumen aparece después del grupo por fila secundaria. Este es el valor predeterminado.

    LashowSummaryOnCollapse propiedad es booleana. Su valor por defecto está configurado como falso, lo que significa que la fila resumen quedaría oculta cuando la fila del grupo se colapsa. Si la propiedad está configurada como verdadera, la fila resumen permanece visible cuando se colapsa la fila del grupo.

    Note

    LasummaryPosition propiedad solo se aplica a los resúmenes a nivel hijo. Los resúmenes a nivel raíz aparecen siempre fijos en la parte inferior de la cuadrícula.

    Demo

    Exporting Summaries

    Existe unaexportSummaries opciónIgxExcelExporterOptions que especifica si los datos exportados deben incluir los resúmenes de la cuadrícula. El valor por defectoexportSummaries es falso.

    ExportaránIgxExcelExporterService los resúmenes por defecto de todos los tipos de columna como funciones equivalentes en Excel para que sigan funcionando correctamente cuando la hoja esté modificada. Pruébalo tú mismo en el ejemplo de abajo:

    El archivo exportado incluye una columna oculta que contiene el nivel de cadaDataRecord uno en la hoja. Este nivel se utiliza en los resúmenes para filtrar las celdas que deben incluirse en la función de resumen.

    En la siguiente tabla, puede encontrar la fórmula de Excel correspondiente a cada uno de los resúmenes predeterminados.

    Tipo de datos Función Función Excel
    string, boolean contar ="Contar: "&CONTAR.SI(inicio:fin, nivel de registro)
    number, currency, percent contar ="Contar: "&CONTAR.SI(inicio:fin, nivel de registro)
    mín. ="Min: "&MIN(IF(inicio:fin=nivel de registro, inicio de rango:fin de rango))
    máximo ="Máx: "&MAX(IF(inicio:fin=nivel de registro, inicio de rango:fin de rango))
    promedio ="Promedio: "&PROMEDIOIF(inicio:fin, nivel de registro, inicio de rango:fin de rango)
    suma ="Suma: "&SUMIF(inicio:fin, nivel de registro, inicio de rango:fin de rango)
    date contar ="Contar: "&CONTAR.SI(inicio:fin, nivel de registro)
    más temprano ="Más temprano: "& TEXT(MIN(IF(start:end=recordLevel, rangeStart:rangeEnd)), formato)
    el último ="Último: "&TEXT(MAX(IF(start:end=recordLevel, rangeStart:rangeEnd)), formato)

    Known Limitations

    Limitación Descripción
    Exportar resúmenes personalizados Los resúmenes personalizados se exportarán como cadenas en lugar de funciones de Excel.
    Exportar resúmenes con plantillas Los resúmenes con plantilla no son compatibles y se exportarán como los predeterminados.

    Keyboard Navigation

    Se puede navegar por las filas de resumen con las siguientes interacciones de teclado:

    • ARRIBA: navega una celda hacia arriba
    • ABAJO: navega una celda hacia abajo
    • IZQUIERDA: navega una celda hacia la izquierda
    • DERECHA: navega una celda hacia la derecha
    • CTRL + IZQUIERDA o INICIO: navega a la celda más a la izquierda
    • CTRL + DERECHA o FINAL: navega a la celda más a la derecha

    Estilismo

    Para empezar a estilizar el comportamiento de ordenación, necesitamos importar elindex archivo, donde están todas las funciones de tema y los componentes mixin:

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

    Siguiendo el enfoque más sencillo, creamos un nuevo tema que extiende ygrid-summary-theme acepta los$background-color parámetros,$focus-background-color,$label-color,$result-color,,$pinned-border-width y$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

    En lugar de codificar los valores de color como acabamos de hacer, podemos lograr mayor flexibilidad en cuanto a colores usando laspalette funciones ycolor. Por favor, consulta elPalettes tema para obtener una guía detallada sobre cómo utilizarlos.

    El último paso es incluir el tema personalizado del componente:

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

    Si el componente utiliza unaEmulated ViewEncapsulation, es necesario quepenetrate esta encapsulación utilice::ng-deep:

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

    Demo

    API References

    Additional Resources

    Nuestra comunidad es activa y siempre da la bienvenida a nuevas ideas.