React Grid con combos en cascada
La funcionalidad de edición de Grid brinda la oportunidad de utilizar componentes de Cascading Combobox. Al seleccionar el valor en cualquier IgrCombo
anterior, los usuarios recibirán solo los datos que sean relevantes para su selección dentro del siguiente componente React Combobox.
Angular Grid with Cascading Combos Sample Overview
El siguiente ejemplo demuestra cómo funciona IgrGrid
con componentes anidados en cascada IgrCombo
.
Setup
In order enable column editing, make sure editable
property is set to true
.
Una vez que la edición de columnas esté habilitada, puede comenzar agregando su IgrCombo
. Tenga en cuenta que aquí para tener solo una selección disponible, deberá utilizar la propiedad singleSelect
.
import { IgrComboModule, IgrCombo } from 'igniteui-react';
IgrComboModule.register();
Luego deberías definir la plantilla de columna con el combo:
<IgrColumn
field="Country"
header="Country"
bodyTemplate={webGridCountryDropDownTemplate}
name="column1">
</IgrColumn>
function webGridCountryDropDownTemplate(props: {dataContext: IgrCellTemplateContext}) => {
var cell = props.dataContext.cell as any;
if (cell === undefined) {
return <></>;
}
const id = cell.id.rowID;
const comboId = "country" + id;
return (
<>
<IgrCombo data={countries} ref={comboRefs} change={(x: any, args: any) => {onCountryChange(id, x, args) }} placeholder="Choose Country..." valueKey="Country" displayKey="Country" singleSelect="true" name={comboId}></IgrCombo>
</>
);
}
displayKey
: obligatorio para matrices de objetos: especifica qué propiedad se utilizará para el texto de los elementos. Si no se especifica ningún valor paradisplayKey
, el combo utilizará lavalueKey
especificada (si corresponde).
Para manejar el cambio de selección, necesitamos el evento change
. Los argumentos del evento emitido contienen información sobre la selección anterior al cambio, la selección actual y los elementos que se agregaron o eliminaron. Por lo tanto, filtrará los valores en función de la selección del combo anterior.
function onCountryChange(rowId: string, cmp: any, args:any) {
const regionCombo = comboRefCollection.get("region_" + rowId);
setTimeout(() => {
const newValue = cmp.value[0];
if (newValue === undefined) {
regionCombo.deselect(regionCombo.value);
regionCombo.disabled = true;
regionCombo.data = [];
} else {
regionCombo.disabled = false;
regionCombo.data = regions.filter(x => x.Country === newValue);
}
});
}
Known Issues and Limitations
Limitación | Descripción |
---|---|
La lista desplegable combinada puede ocultarse detrás de otros elementos de la interfaz de usuario. | Debido al orden de apilamiento de los elementos en la cuadrícula, el menú desplegable combinado puede ocultarse detrás de otros elementos como encabezados, pies de página, etc. |