Visão geral da seleção de grade do React
Com o recurso Ignite UI for React Select no React Grid, você pode interagir e manipular dados facilmente usando interações simples do mouse. Existem três modos de seleção disponíveis:
- Seleção de linha
- Seleção de células
- Column selection
Com a rowSelection
propriedade, você pode especificar:
- Nenhum
- Solteiro
- Seleção múltipla
React Grid Selection Example
O exemplo abaixo demonstra três tipos de comportamentos de seleção de células no IgrGrid
. Use os botões abaixo para ativar cada um dos modos de seleção disponíveis.
React Grid Selection Options
O componente Ignite UI for React IgrGrid
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 de várias células está habilitado no IgrGrid
. Para alterar/ativar o modo de seleção, cellSelection
você pode usar rowSelection
ou selectable
propriedades.
React Grid Row Selection
permite rowSelection
que você especifique as seguintes opções:
None
- A seleção de linha seria desativada para oIgrGrid
.Single
- A seleção de apenas uma linha dentro doIgrGrid
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.
React Grid Cell Selection
permite cellSelection
que você especifique as seguintes opções:
None
- A seleção de células seria desativada para oIgrGrid
.Single
- A seleção de apenas uma célula dentro doIgrGrid
estaria disponível.Multiple
- Atualmente, este é o estado padrão da seleção noIgrGrid
. A seleção de várias células 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.
React Grid Column Selection
A selectable
propriedade permite que você especifique as opções a seguir para cada um IgrColumn
. 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.
React Grid Context Menu
Usando o evento, ContextMenu
você pode adicionar um menu de contexto personalizado para facilitar seu trabalho IgrGrid
. Com um clique com o botão direito do mouse no corpo da grade, o evento emite a célula na qual é acionado. O menu de contexto funcionará 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:
const rightClick = (event: IgrGridContextMenuEventArgs) => {
const eventArgs = event.detail;
eventArgs.event.preventDefault();
const node = eventArgs.cell.cellID;
const isCellWithinRange = gridRef.current
.getSelectedRanges()
.some((range: any) => {
if (
node.columnID >= range.columnStart &&
node.columnID <= range.columnEnd &&
node.rowIndex >= range.rowStart &&
node.rowIndex <= range.rowEnd
) {
return true;
}
return false;
});
setIsCellWithinRange(isCellWithinRange);
setClickedCell(eventArgs.cell);
openContextMenu(eventArgs.event.clientX, eventArgs.event.clientY);
};
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.
const copySelectedRowData = () => {
const selectedData = gridRef.current.getRowData(clickedCell.cellID.rowID);
copyData(selectedData);
closeContextMenu();
};
const copySelectedCellData = () => {
const selectedData = clickedCell.value;
copyData(selectedData);
closeContextMenu();
};
const copySelectedData = () => {
const selectedData = gridRef.current.getSelectedData(null, null);
copyData(selectedData);
closeContextMenu();
};
const copyData = (data: any[]) => {
const tempElement = document.createElement("input");
document.body.appendChild(tempElement);
tempElement.setAttribute("id", "temp_id");
(document.getElementById("temp_id") as HTMLInputElement).value =
JSON.stringify(data);
tempElement.select();
const dataStringified = JSON.stringify(data);
navigator.clipboard.writeText(dataStringified).catch((err) => {
console.error("Failed to copy: ", err);
});
document.body.removeChild(tempElement);
setSelectedData(dataStringified);
};
O IgrGrid
buscará os dados copiados e os colará em um elemento de contêiner.
O modelo que vamos usar para combinar a grade com o menu de contexto:
<>
<div className="container sample">
<div className="wrapper" onClick={closeContextMenu}>
<IgrGrid
autoGenerate={false}
data={northWindData}
primaryKey="ProductID"
ref={gridRef}
onContextMenu={rightClick}
>
<IgrColumn field="ProductID" header="Product ID"></IgrColumn>
<IgrColumn field="ProductName" header="Product Name"></IgrColumn>
<IgrColumn
field="UnitsInStock"
header="Units In Stock"
dataType="number"
></IgrColumn>
<IgrColumn
field="UnitPrice"
header="Units Price"
dataType="number"
></IgrColumn>
<IgrColumn field="Discontinued" dataType="boolean"></IgrColumn>
<IgrColumn
field="OrderDate"
header="Order Date"
dataType="date"
></IgrColumn>
</IgrGrid>
<div className="selected-data-area">{selectedData}</div>
</div>
</div>
<div style={{ display: "none" }} className="contextmenu" ref={contextMenuRef}>
<span className="item" onClick={copySelectedCellData}>
<IgrIcon ref={iconRef} collection="material" name="content_copy"></IgrIcon>
Copy Cell Data
</span>
<span className="item" onClick={copySelectedRowData}>
<IgrIcon collection="material" name="content_copy"></IgrIcon>Copy Row Data
</span>
{isCellWithinRange && (
<span className="item" onClick={copySelectedData}>
<IgrIcon collection="material" name="content_copy"></IgrIcon>Copy Cells Data
</span>
)}
</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 tiver nenhuma primaryKey
configuração e os cenários de dados remotos estiverem habilitados (ao paginar, classificar, filtrar, rolar solicitações de gatilho 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.