React grupo de cuadrícula por
La Ignite UI for React en React IgrGrid crea filas de datos agrupadas en función de los valores de las columnas. El Grupo por en IgrGrid
permite visualizar los grupos en una estructura jerárquica. Las filas de datos agrupados se pueden expandir o contraer y el orden de agrupación se puede cambiar a través de la interfaz de usuario o API. Cuando la Selección de fila está habilitada, se representa un selector de fila Agrupar por en el área más a la izquierda de la fila del grupo. En caso de que la propiedad rowSelection
esté configurada como única, las casillas de verificación están deshabilitadas y solo sirven como indicación para el grupo donde se coloca la selección. Si la propiedad rowSelection
está configurada en múltiple, al hacer clic en el selector de fila Agrupar por se seleccionan todos los registros que pertenecen a este grupo.
React Grid Group By Example
Este ejemplo presenta las capacidades de agrupación de una gran cantidad de datos. Arrastrar los encabezados de las columnas a la parte superior (área de agrupación) permite a los usuarios ver los datos de la columna seleccionada en una estructura jerárquica. Pueden agrupar en varios campos arrastrando más encabezados de columna a la parte superior. Estas opciones de agrupación resultan útiles cuando tienes tablas con numerosas filas y columnas donde los usuarios quieren presentar los datos de una manera mucho más rápida y visualmente aceptable.
Initial Grouping State
Es posible definir la agrupación inicial de la cuadrícula asignando una matriz de expresiones a la propiedad groupingExpressions
de la cuadrícula.
const expressions = [
{ fieldName: 'ProductName', dir: SortingDirection.Desc },
{ fieldName: 'Released', dir: SortingDirection.Desc }
];
function App() {
const grid1Ref = useRef();
return (
<>
<IgrGrid
autoGenerate="true"
groupingExpressions={expressions}
ref={grid1Ref}>
</IgrGrid>
</>
)
}
Las expresiones de agrupación implementan la interfaz ISortingExpression
.
Group By API
Grouping API
La agrupación está disponible a través de la interfaz de usuario y mediante una API sólida expuesta por el componente de cuadrícula. Los desarrolladores pueden permitir a los usuarios finales agrupar los datos de la cuadrícula por ciertas columnas, estableciendo la propiedad Groupable
de cada columna en true
.
function App() {
const gridRef = useRef();
return (
<>
<IgrGrid
autoGenerate="false"
ref={gridRef}
>
<IgrColumn field="OrderID" hidden="true"></IgrColumn>
<IgrColumn field="ShipCountry" header="Ship Country" width="200px" groupable="true"></IgrColumn>
<IgrColumn field="OrderDate" header="Order Date" dataType="date" width="200px" groupable="true"></IgrColumn>
<IgrColumn field="PostalCode" header="Postal Code" width="200px" groupable="true"></IgrColumn>
<IgrColumn field="Discontinued" width="200px" dataType="boolean" groupable="true"></IgrColumn>
<IgrColumn field="ShipName" header="Ship Name" width="200px" groupable="false"></IgrColumn>
<IgrColumn field="ShipCity" header="Ship City" width="200px" groupable="false"></IgrColumn>
<IgrColumn field="ShipperName" header="Shipper Name" width="200px" groupable="true"></IgrColumn>
<IgrColumn field="Salesperson" header="Sales Person" width="200px" groupable="true"></IgrColumn>
<IgrColumn field="UnitPrice" header="Unit Price" width="200px" groupable="true"></IgrColumn>
<IgrColumn field="Quantity" width="200px" groupable="true"></IgrColumn>
</IgrGrid>
</>
)
}
Durante el tiempo de ejecución, las expresiones se pueden obtener y configurar desde la propiedad groupingExpressions
. Si necesita agregar o cambiar una expresión existente, también puede usar el método groupBy
con una sola expresión o una serie de expresiones.
gridRef.current.groupBy([{ fieldName: 'ProductName', dir: SortingDirection.Desc, ignoreCase: true }]);
Expand/Collapse API
Además de agrupar expresiones, también puede controlar los estados de expansión de las filas del grupo. Se almacenan en una propiedad separada del componente IgrGrid
groupingExpansionState
, que es una colección de IgrGroupByExpandState
. Cada estado de expansión se define de forma única por el nombre del campo para el que se crea y el valor que representa para cada nivel de agrupación, es decir, el identificador es una matriz jerárquica de IgrGroupByKey
.
Al igual que con groupingExpressions
, configurar una lista de IgrGroupByExpandState
directamente en groupingExpansionState
cambiará la expansión en consecuencia. Además, IgrGrid
expone un método toggleGroup
que alterna un grupo según la instancia de registro del grupo o mediante la propiedad expanded
de la fila.
const groupRow = gridRef.current.getRowByIndex(0).groupRow;
gridRef.current.toggleGroup(groupRow);
const groupRow = gridRef.current.getRowByIndex(0);
groupRow.expanded = false;
Los grupos se pueden crear expandidos (predeterminado) o contraídos y los estados de expansión generalmente solo contendrán el estado opuesto al comportamiento predeterminado. Puede controlar si los grupos deben crearse expandidos o no a través de la propiedad groupsExpanded
.
Select/Deselect All Rows in a Group API
Seleccionar/deseleccionar todas las filas de un grupo está disponible a través de los métodos API selectRowsInGroup
y deselectRowsInGroup
.
El siguiente fragmento de código se puede utilizar para seleccionar todas las filas dentro de un grupo utilizando el método selectRowsInGroup
de instancia de registro de grupo. Además, el segundo parámetro de este método es una propiedad booleana mediante la cual puede elegir si la selección de fila anterior se borrará o no. La selección anterior se conserva de forma predeterminada.
const groupRow = gridRef.current.getRowByIndex(0).groupRow;
gridRef.current.selectRowsInGroup(groupRow);
Si necesita anular la selección de todas las filas dentro de un grupo mediante programación, puede utilizar el método deselectRowsInGroup
.
const groupRow = gridRef.current.getRowByIndex(0).groupRow;
gridRef.current.deselectRowsInGroup(groupRow);
Templating
Group Row Templates
La fila del grupo, excepto la interfaz de usuario para expandir/contraer, es totalmente adaptable a plantillas. De forma predeterminada, muestra un icono de agrupación y muestra el nombre del campo y el valor que representa. El contexto para representar la plantilla es de tipo IgrGroupByRecord
.
Como ejemplo, la siguiente plantilla haría que el resumen de filas del grupo fuera más detallado:
function template(ctx: { dataContext: IgrGroupByRowTemplateContext }) {
const groupRow = ctx.dataContext.implicit;
return (<>
<span>Total items with value: { groupRow.value } are { groupRow.records.length }</span>
</>)
}
Group Row Selector Templates
Como se mencionó anteriormente, la fila del grupo, excepto la interfaz de usuario para expandir/contraer, es totalmente adaptable a plantillas. Para crear una plantilla de selector de filas Agrupar por personalizada, utilice groupByRowSelectorTemplate
. Desde la plantilla, puede acceder a la variable de contexto proporcionada implícitamente, con propiedades que le brindan información sobre el estado de la fila Agrupar por.
La propiedad SelectedCount
muestra cuántos registros del grupo están seleccionados actualmente, mientras que TotalCount
muestra cuántos registros pertenecen al grupo.
function template(ctx: { dataContext: IgrGroupByRowSelectorTemplateContext }) {
return (<>
{ ctx.dataContext.implicit.selectedCount } / { ctx.dataContext.implicit.totalCount }
</>)
}
La propiedad GroupRow
devuelve una referencia a la fila del grupo.
function template(ctx: { dataContext: IgrGroupByRowSelectorTemplateContext }) {
const groupRow = ctx.dataContext.implicit.groupRow;
return (<>
<div onClick={(e: any) => handleGroupByRowSelectorClick(e, groupRow)}>Handle groupRow</div> `;
</>)
}
Las propiedades SelectedCount
y TotalCount
se pueden utilizar para determinar si el selector de fila Agrupar por debe estar marcado o indeterminado (seleccionado parcialmente).
React Grid Group By With Paging
Las filas de grupo participan en el proceso de paginación junto con las filas de datos. Cuentan para el tamaño de página de cada página. Las filas contraídas no se incluyen en el proceso de paginación. Cualquier operación de expandir o contraer obliga a Paging a recalcular el recuento de páginas y ajustar el índice de páginas si es necesario. Los grupos que abarcan varias páginas se dividen entre ellos. La fila del grupo es visible solo en la página en la que comienza y no se repite en las páginas siguientes. La información de resumen de las filas del grupo se calcula en función de todo el grupo y no se ve afectada por la paginación.
React Group By With Paging Example
Group By With Summaries
La integración entre Agrupar por y Resúmenes se describe en el tema Resúmenes.
Keyboard Navigation
La interfaz de usuario de agrupación admite las siguientes interacciones de teclado:
Para filas de grupo (el foco debe estar en la fila o en la celda expandir/contraer)
- ALT + DERECHA: expande el grupo
- ALT + IZQUIERDA: colapsa el grupo
- ESPACIO: selecciona todas las filas del grupo, si la propiedad RowSelection está establecida en múltiples
Para los componentes del grupo
IgrChip
en el grupo por área (el foco debe estar en el chip)- MAYÚS + IZQUIERDA: mueve el chip enfocado hacia la izquierda, cambiando el orden de agrupación, si es posible
- MAYÚS + DERECHA: mueve el chip enfocado hacia la derecha, cambiando el orden de agrupación, si es posible
- ESPACIO: cambia la dirección de clasificación
- ELIMINAR: desagrupa el campo
- Los elementos separados del chip también se pueden enfocar y se puede interactuar con ellos mediante la ENTER llave.
React Grid Custom Group By
Grid permite definir agrupaciones personalizadas por columna o por expresión de agrupación, lo que proporciona agrupaciones basadas en una condición personalizada. Esto es útil cuando necesita agrupar por objetos complejos o para otros escenarios específicos de aplicaciones.
El siguiente ejemplo muestra la agrupación personalizada por Date
, donde los valores de fecha se ordenan y agrupan por Día, Semana, Mes o Año según el modo de agrupación seleccionado por el usuario.
React Custom Group By Example
El ejemplo define una clasificación personalizada para las diferentes condiciones de fecha. Cada estrategia personalizada define el método GroupingComparer
, que es la función de comparación personalizada que se utiliza al ordenar los valores. Además extrae los valores de la fecha necesarios para la comparación.
const groupByMode = "Month";
function getParsedDate(date: any) {
return {
day: date.getDay(),
month: date.getMonth() + 1,
year: date.getFullYear()
};
}
Se define una función GroupingComparer
para las expresiones de agrupación, que determina los elementos que pertenecen al mismo grupo en función del modo de agrupación seleccionado. Los valores de los datos ordenados para los que esta función devuelve 0 se marcan como parte del mismo grupo.
grid.groupingExpressions = [
{ fieldName: 'OrderDate', dir: SortingDirection.Desc,
groupingComparer: (a, b) => {
const dateA = this.getParsedDate(a);
const dateB = this.getParsedDate(b);
if (this.groupByMode === 'Month') {
return dateA.month === dateB.month ? 0 : -1;
} else if (this.groupByMode === "Year") {
return dateA.year === dateB.year ? 0 : -1;
} else if (this.groupByMode === 'Week') {
return this.getWeekOfDate(a) === this.getWeekOfDate(b) ? 0 : -1;
}
return dateA.day === dateB.day && dateA.month === dateB.month ? 0 : -1;
}
}
];
Styling
Además de los temas predefinidos, la cuadrícula se puede personalizar aún más configurando algunas de las propiedades CSS disponibles. En caso de que desee cambiar algunos de los colores, primero debe establecer una clase para la cuadrícula:
function App() {
return (
<IgrGrid className="grid">
</IgrGrid>
)
}
Luego configure las propiedades CSS relacionadas para esa clase:
.grid {
--ig-grid-group-row-background: #969799;
--ig-grid-group-row-selected-background: #969799;
--ig-grid-group-label-column-name-text: #f8f8f8;
--ig-grid-group-label-text: #f8f8f8;
--ig-grid-group-count-text-color: #222;
--ig-grid-expand-icon-color: #f8f8f8;
--ig-grid-expand-icon-hover-color: #f8f8f8;
}
Demo
Known Limitations
Limitación | Descripción |
---|---|
La cantidad máxima de columnas agrupadas es 10. | Si se agrupan más de 10 columnas, se genera un error. |
API References
Additional Resources
- Descripción general de la cuadrícula
- Virtualización y rendimiento
- Paginación
- Filtración
- Clasificación
- Columna en movimiento
- resúmenes
- Cambio de tamaño de columna
- Selección
Nuestra comunidad es activa y siempre da la bienvenida a nuevas ideas.