Blazor 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 IgbCombo
anterior, os usuários receberão apenas os dados relevantes para sua seleção no próximo componente Blazor Combobox.
Angular Grid with Cascading Combos Sample Overview
O exemplo abaixo demonstra como IgbGrid
funciona com componentes em cascata IgbCombo
aninhados.
Setup
In order enable column editing, make sure editable
property is set to true
.
Depois que a edição da coluna estiver habilitada, você pode começar adicionando seu IgbCombo
. Por favor, note que aqui, para ter apenas uma única seleção disponível, terá de utilizar a opção definir a singleSelect
propriedade.
Para começar a usar o IgbCombo
, primeiro você precisa importá-lo:
builder.Services.AddIgniteUIBlazor(
typeof(IgbGridModule),
typeof(IgbComboModule)
);
Em seguida, você deve definir o modelo de coluna com o combo:
<IgbColumn Field="Country" Header="Country" BodyTemplate="WebGridCountryDropDownTemplate"></IgbColumn>
@code{
public static RenderFragment<IgbCellTemplateContext> WebGridCountryDropDownTemplate = (context) =>
{
var id = "country_" + context.Cell.Id.RowID;
return @<IgbCombo id="@id" Placeholder="Choose Country..." SingleSelect=true ValueKey="Country" DisplayKey="Country" ChangeScript="CountryChange"></IgbCombo>;
};
}
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 change
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.
//In Javascript
igRegisterScript("CountryChange", (ctx) => {
const value = e.detail.newValue;
cell.update(value);
const nextCombo = document.getElementById("region_" + cell.id.rowID);
const nextProgress = document.getElementById("progress_region_" + cell.id.rowID);
if (value === "") {
nextCombo.deselect(nextCombo.value);
nextCombo.disabled = true;
nextCombo.data = [];
} else {
nextProgress.style.display = "block";
setTimeout(() => {
nextProgress.style.display = "none";
nextCombo.disabled = false;
nextCombo.data = this.regions.filter(x => x.Country === value);
}, 2000);
}
});
E, por último, adicionar o IgbLinearProgress
, que é necessário ao carregar a lista de dados.
public static RenderFragment<IgbCellTemplateContext> WebGridRegionDropDownTemplate = (context) =>
{
var id = "region_" + context.Cell.Id.RowID;
return @<div style="display:flex;flex-direction:column;"><IgbCombo id="@id" Placeholder="Choose Region..." SingleSelect=true ValueKey="Region" DisplayKey="Region" ChangeScript="RegionChange"></IgbCombo><IgbLinearProgress Indeterminate=true></IgbLinearProgress></div>;
};
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. |