Angular Tree Grid Summaries
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 del árbol.
Angular Tree 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 de árbol también se pueden habilitar a nivel de columna en Ignite UI for Angular, lo que significa que solo puede activarlo para las columnas que necesite. Los resúmenes de cuadrícula de árbol le proporcionan 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 Tree Grid están habilitados por columna estableciendohasSummary la propiedad paratrue. 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-tree-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-tree-grid #grid1 [data]="data" [autoGenerate]="false" height="800px" width="800px" (columnInit)="initColumn($event)">
<igx-column field="ID" header="Order ID" width="200px" [sortable]="true"></igx-column>
<igx-column field="Name" header="Order Product" width="200px" [sortable]="true" [hasSummary]="true"></igx-column>
<igx-column field="Units" width="200px" [editable]="true" [dataType]="'number'" [hasSummary]="true"></igx-column>
</igx-tree-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 de árbol igx.
<igx-tree-grid #grid1 [data]="data" [autoGenerate]="false" height="800px" width="800px" (columnInit)="initColumn($event)" >
<igx-column field="ID" header="Order ID" width="200px" [sortable]="true"></igx-column>
<igx-column field="Name" header="Order Product" width="200px" [sortable]="true" [hasSummary]="true" ></igx-column>
<igx-column field="Units" width="200px" [editable]="true" [dataType]="'number'" [hasSummary]="false"></igx-column>
</igx-tree-grid>
<button (click)="enableSummary()">Enable Summary</button>
<button (click)="disableSummary()">Disable Summary </button>
public enableSummary() {
this.grid1.enableSummaries([
{fieldName: 'Units', customSummary: this.mySummary},
{fieldName: 'ID'}
]);
}
public disableSummary() {
this.grid1.disableSummaries('Name');
}
Custom Tree 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 de Árbol 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 columnaUnitPrice. Lo lograremos asignando lasummaries propiedad a la clase que creamos a continuación.
<igx-tree-grid #grid1 [data]="data" [autoGenerate]="false" height="800px" width="800px" (columnInit)="initColumn($event)">
<igx-column field="ID" header="Order ID" width="200px" [sortable]="true"></igx-column>
<igx-column field="Name" header="Order Product" width="200px" [sortable]="true" [hasSummary]="true"></igx-column>
<igx-column field="Units" [dataType]="'number'" width="200px" [editable]="true" [hasSummary]="true" [summaries]="mySummary"></igx-column>
<igx-column field="UnitPrice" header="Unit Price" width="200px" [dataType]="'number'" [dataType]="'currency'" [hasSummary]="true"></igx-column>
</igx-tree-grid>
...
export class GridComponent implements OnInit {
mySummary = MySummary;
....
}
Custom summaries, which access all data
Ahora puedes acceder a todos los datos de la Cuadrícula de Árbol dentro del resumen de columnas personalizadas. 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 Undelivered', 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:
<!-- custom summaries -->
<igx-column
field="Units"
header="Units"
dataType="number"
[hasSummary]="true"
[summaries]="unitsSummary"
[disabledSummaries]="['uniqueCount', 'maxDifference']"
>
</igx-column>
<!-- default summaries -->
<igx-column
field="UnitPrice"
header="Unit Price"
dataType="number"
[hasSummary]="true"
[disabledSummaries]="['count', 'sum', 'average']"
>
</igx-column>
ParaUnits esto, los resúmenes personalizados comototalDelivered ytotalNotDelivered se excluyen usando ladisabledSummaries propiedad.
PorqueUnitPrice, los resúmenes por defecto comocount,sum, yaverage están deshabilitados, dejando a otros comomin ymax activos.
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>
Child Summaries
La Tree Grid soporta resúmenes separados para los nodos raíz y para cada nivel de nodo hijo anidado. Qué resúmenes se muestran es configurable usando lasummaryCalculationMode propiedad. Los resúmenes a nivel hijo pueden mostrarse antes o después de los nodos hijos usando lasummaryPosition propiedad. Junto con estas dos propiedades, IgxTreeGrid expone unashowSummaryOnCollapse propiedad que permite determinar si la fila resumen permanece visible cuando el nodo padre al que se refiere se colapsa.
Los valores disponibles de lasummaryCalculationMode propiedad son:
- rootLevelOnly: los resúmenes se calculan solo para los nodos del 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 de la lista de filas secundarias.
- abajo: la fila de resumen aparece después de la lista de filas secundarias. 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 padre se colapsa. Si la propiedad está configurada como verdadera, la fila resumen permanece visible cuando la fila madre se colapsa.
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 del árbol.
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
- IgxTreeGridComponent API
- IgxTreeGridComponent Styles
- IgxTreeGridSummaries Styles
- IgxSummaryOperando
- IgxNúmeroResumenOperando
- IgxFechaResumenOperando
- Componente de grupo de columnas Igx
- ComponenteColumnaIgx
Additional Resources
- Descripción general de la cuadrícula de árbol
- Tipos de datos de columna
- Virtualización y rendimiento
- Paginación
- Filtración
- Clasificación
- Columna en movimiento
- Fijación de columnas
- Cambio de tamaño de columna
- Selección