Visão geral da seleção Blazor Grid
Com o recurso Ignite UI for Blazor Select no Blazor Grid, você pode interagir e manipular dados facilmente usando interações simples do mouse. Há três modos de seleção disponíveis:
- Seleção de linha
- Seleção de células
- Column selection
Com a propriedade RowSelection
, você pode especificar:
- Nenhum
- Solteiro
- Seleção múltipla
Blazor Grid Selection Example
O exemplo abaixo demonstra três tipos de comportamentos de seleção de células no IgbGrid
. Use os botões abaixo para habilitar cada um dos modos de seleção disponíveis.
Blazor Grid Selection Options
O componente Ignite UI for Blazor IgbGrid
fornece três modos de seleção diferentes -Seleção de linha, Seleção de célula e Seleção de coluna. Por padrão, apenas o modo de seleção Multi-célula é habilitado no IgbGrid
. Para alterar/habilitar o modo de seleção, você pode usar as propriedades RowSelection
, CellSelection
ou Selectable
.
Blazor Grid Row Selection
A propriedade RowSelection
permite que você especifique as seguintes opções:
None
- A seleção de linha seria desabilitada para oIgbGrid
.Single
- A seleção de apenas uma linha dentro doIgbGrid
estaria disponível.Multiple
- A seleção de várias linhas estaria disponível usando os seletores de linha, com uma combinação de teclas como ctrl + clique, ou pressionando a tecla de espaço quando uma célula estiver em foco.
Vá para o tópico Seleção de linha para obter mais informações.
Blazor Grid Cell Selection
A propriedade CellSelection
permite que você especifique as seguintes opções:
None
- A seleção de células seria desabilitada para oIgbGrid
.Single
- A seleção de apenas uma célula dentro doIgbGrid
estaria disponível.Multiple
- Atualmente, este é o estado padrão da seleção noIgbGrid
. A seleção multi-célula está disponível arrastando o mouse sobre as células, após um clique do botão esquerdo do mouse continuamente.
Vá para o tópico Seleção de célula para obter mais informações.
Blazor Grid Column Selection
A propriedade Selectable
permite que você especifique as seguintes opções para cada IgbColumn
. A seleção de coluna correspondente será habilitada ou desabilitada se essa propriedade for definida como true ou false, respectivamente.
Isso leva às três variações seguintes:
- Seleção única -mouse click sobre a célula da coluna.
- Seleção de várias colunas - segurando ctrl + mouse click sobre as células da coluna.
- Seleção de coluna de intervalo - segurando shift + mouse click seleciona tudo no meio.
Acesse o tópico Seleção de coluna para obter mais informações.
Blazor Grid Context Menu
Usando o evento ContextMenu
você pode adicionar um menu de contexto personalizado para facilitar seu trabalho com IgbGrid
. Com um clique direito no corpo da grade, o evento emite a célula na qual ele é disparado. O menu de contexto operará com a célula emitida.
Se houver uma seleção de várias células, colocaremos lógica, que verificará se a célula selecionada está na área da seleção de várias células. Se for, também emitiremos os valores das células selecionadas.
Basicamente, a função principal ficará assim:
public void RightClick(MouseEventArgs e)
{
this.MenuX = e.ClientX + "px";
this.MenuY = e.ClientY + "px";
}
public void onMenuShow(IgbGridCellEventArgs e)
{
IgbGridCellEventArgsDetail detail = e.Detail;
this.ShowMenu = true;
this.ClickedCell = detail.Cell;
}
O menu de contexto terá as seguintes funções:
- Copie o valor da célula selecionada.
- Copie o dataRow da célula selecionada.
- Se a célula selecionada estiver dentro de um intervalo de seleção de várias células, copie todos os dados selecionados.
public void CopyCellData()
{
this.ShowMenu = false;
this.SelectedData = this.ClickedCell.Value.ToString();
StateHasChanged();
}
public async void CopyRowData()
{
this.ShowMenu = false;
NwindDataItem rowData = this.NwindData.ElementAt(this.ClickedCell.Id.RowIndex);
this.SelectedData = JsonConvert.SerializeObject(rowData);
StateHasChanged();
}
public async void CopyCellsData()
{
this.ShowMenu = false;
var selectedData = await this.grid.GetSelectedDataAsync(true, false);
this.SelectedData = JsonConvert.SerializeObject(selectedData);
StateHasChanged();
}
O IgbGrid
buscará os dados copiados e os colará em um elemento contêiner.
O modelo que vamos usar para combinar a grade com o menu de contexto:
<div class="container vertical">
<div class="wrapper" oncontextmenu="event.preventDefault()">
<IgbGrid AutoGenerate="false"
CellSelection="GridSelectionMode.Multiple"
ContextMenu="onMenuShow"
@oncontextmenu="RightClick"
Name="grid"
@ref="grid"
Data="NwindData">
<IgbColumn Field="ProductID"
Header="Product ID">
</IgbColumn>
<IgbColumn Field="ProductName"
Header="Product Name">
</IgbColumn>
<IgbColumn Field="UnitsInStock"
Header="Units In Stock"
DataType="GridColumnDataType.Number">
</IgbColumn>
<IgbColumn Field="UnitPrice"
Header="Units Price"
DataType="GridColumnDataType.Number">
</IgbColumn>
<IgbColumn Field="Discontinued"
DataType="GridColumnDataType.Boolean">
</IgbColumn>
<IgbColumn Field="OrderDate"
Header="Order Date"
DataType="GridColumnDataType.Date">
</IgbColumn>
</IgbGrid>
<div class="selected-data-area">
@SelectedData
</div>
</div>
@if (ShowMenu)
{
<div id="menu" class="contextmenu" style="left: @MenuX; top: @MenuY">
<span id="copySingleCell" class="item" @onclick="CopyCellData">
<IgbIcon @ref=icon IconName="content_copy" Collection="material"></IgbIcon>Copy Cell Data
</span>
<span id="copyRow" class="item" @onclick="CopyRowData">
<IgbIcon IconName="content_copy" Collection="material"></IgbIcon>Copy Row Data
</span>
<span id="copyMultiCells" class="item" @onclick="CopyCellsData">
<IgbIcon IconName="content_copy" Collection="material"></IgbIcon>Copy Cells Data
</span>
</div>
}
</div>
Selecione várias células e pressione o botão direito do mouse. O menu de contexto aparecerá e após selecionar Copy cells data os dados selecionados aparecerão na caixa vazia à direita.
O resultado é:
Known Issues and Limitations
Quando a grade não tem PrimaryKey
definido e cenários de dados remotos estão habilitados (quando paginação, classificação, filtragem e rolagem acionam solicitações para um servidor remoto para recuperar os dados a serem exibidos na grade), uma linha perderá o seguinte estado após a conclusão de uma solicitação de dados:
- Seleção de linha
- Expandir/recolher linha
- Edição de linha
- Fixação de linha
API References
Additional Resources
- Seleção de linha
- Seleção de células
- Paginação
- Filtragem
- Classificação
- Resumos
- Movimentação de Colunas
- Virtualização e desempenho
Nossa comunidade é ativa e sempre acolhedora para novas ideias.