React Grade com combos em cascata
A funcionalidade de edição da grade oferece a oportunidade de usar componentes de caixa de combinação em cascata. Ao selecionar o valor em qualquer IgrCombo
anterior, os usuários receberão apenas os dados relevantes para sua seleção no próximo componente React Combobox.
Angular Grid with Cascading Combos Sample Overview
O exemplo abaixo demonstra como IgrGrid
funciona com componentes em cascata IgrCombo
aninhados.
Setup
Para habilitar a edição de coluna, certifique-se de que editable
a propriedade esteja definida como true
.
Depois que a edição da coluna estiver habilitada, você pode começar adicionando seu IgrCombo
. Por favor, note que aqui, para ter apenas uma única seleção disponível, terá de utilizar a opção definir a singleSelect
propriedade.
import { IgrCombo } from 'igniteui-react';
Em seguida, você deve definir o modelo de coluna com o combo:
<IgrColumn
field="Country"
header="Country"
bodyTemplate={webGridCountryDropDownTemplate}>
</IgrColumn>
const webGridCountryDropDownTemplate = (ctx: IgrCellTemplateContext) => {
const rowId = ctx.cell?.id.rowID;
if (!rowId) return <></>;
const comboId = `country_${rowId}`;
return (
<>
<IgrCombo
data={countries}
ref={getComboRef(comboId)}
onChange={(event: CustomEvent) => { onCountryChange(rowId, event) }}
placeholder="Choose Country..."
valueKey="Country"
displayKey="Country"
singleSelect={true}
name={comboId}>
</IgrCombo>
</>
);
}
displayKey
- Obrigatório para matrizes de objetos - Especifica qual propriedade será usada para o texto dos itens. Se nenhum valor for especificado paradisplayKey
, o combo usará o especificadovalueKey
(se houver).
Para lidar com a mudança de seleção, precisamos do onChange
evento. Os argumentos de evento emitidos contêm informações sobre a seleção anterior à alteração, a seleção atual e os itens que foram adicionados ou removidos. Portanto, ele filtrará os valores com base na seleção do combo anterior.
const onCountryChange = (rowId: string, event: CustomEvent) => {
const regionCombo = getComboRef(`region_${rowId}`).current;
const cityCombo = getComboRef(`city_${rowId}`).current;
const regions = regions;
const newValue = event.detail.newValue[0];
if (newValue === undefined) {
regionCombo.deselect(regionCombo.value);
regionCombo.disabled = true;
regionCombo.data = [];
cityCombo.deselect(regionCombo.value);
cityCombo.disabled = true;
cityCombo.data = [];
} else {
regionCombo.disabled = false;
regionCombo.data = regions.filter(x => x.Country === newValue);
cityCombo.deselect(cityCombo.value);
cityCombo.disabled = true;
cityCombo.data = [];
}
}
Known Issues and Limitations
Limitação | Descrição |
---|---|
A lista suspensa de combinação pode se esconder atrás de outros elementos da interface do usuário. | Devido à ordem de empilhamento dos elementos na grade, o menu suspenso de combinação pode se esconder atrás de outros elementos, como cabeçalho, rodapés, etc. |