Descripción general de la selección de cuadrícula Web Components
Con la función Ignite UI for Web Components Select en Web Components Grid, puede interactuar y manipular datos fácilmente mediante simples interacciones con el mouse. Hay tres modos de selección disponibles:
- Selección de fila
- Selección de celda
- Column selection
Con la propiedad rowSelection
, puede especificar:
- Ninguno
- Soltero
- Selección múltiple
Web Components Grid Selection Example
El siguiente ejemplo demuestra tres tipos de comportamientos de selección de celdas en IgcGridComponent
. Utilice los botones a continuación para habilitar cada uno de los modos de selección disponibles.
Web Components Grid Selection Options
El Ignite UI for Web Components IgcGridComponent
proporciona tres modos de selección diferentes: selección de filas, selección de celdas y selección de columnas. De forma predeterminada, solo el modo de selección de celdas múltiples está habilitado en IgcGridComponent
. Para cambiar/habilitar el modo de selección, puede usar rowSelection
, cellSelection
o propiedades selectable
.
Web Components Grid Row Selection
La propiedad rowSelection
le permite especificar las siguientes opciones:
- La selección
None
fila estaría deshabilitada paraIgcGridComponent
. Single
: la selección de solo una fila dentro delIgcGridComponent
estaría disponible.Multiple
: la selección de varias filas estaría disponible usando los selectores de filas, con una combinación de teclas como Ctrl + clic, o presionando la tecla de espacio una vez que una celda está enfocada.
Vaya al tema Selección de filas para obtener más información.
Web Components Grid Cell Selection
La propiedad cellSelection
le permite especificar las siguientes opciones:
None
: la selección de celdas se deshabilitaría paraIgcGridComponent
.Single
: la selección de solo una celda dentro delIgcGridComponent
estaría disponible.Multiple
: actualmente, este es el estado predeterminado de la selección enIgcGridComponent
. La selección de varias celdas está disponible arrastrando el mouse sobre las celdas, después de hacer clic continuamente con el botón izquierdo del mouse.
Vaya al tema Selección de celda para obtener más información.
Web Components Grid Column Selection
La selectable
propiedad permite especificar las siguientes opciones para cada uno IgcColumnComponent
. La selección de columna correspondiente se habilitará o deshabilitará si esta propiedad se establece en true o false, respectivamente.
Esto lleva a las siguientes tres variaciones:
- Selección única: haga clic con el mouse sobre la celda de la columna.
- Selección de varias columnas: mantenga presionado Ctrl + clic del mouse sobre las celdas de la columna.
- Selección de columnas de rango: mantener presionada la tecla Mayús + clic del mouse selecciona todo lo que se encuentra en el medio.
Vaya al tema Selección de columnas para obtener más información.
Web Components Grid Context Menu
Usando el evento ContextMenu
puede agregar un menú contextual personalizado para facilitar su trabajo con IgcGridComponent
. Con un clic derecho en el cuerpo de la grilla, el evento emite la celda en la que se activa. El menú contextual funcionará con la celda emitida.
Si hay una selección multicelda, pondremos lógica, que comprobará si la celda seleccionada está en el área de selección multicelda. Si es así, también emitiremos los valores de las celdas seleccionadas.
Básicamente la función principal se verá así:
public rightClick(event: any) {
const eventArgs = event.detail;
eventArgs.event.preventDefault();
this.multiCellArgs = {};
if (this.multiCellSelection) {
const node = eventArgs.cell.selectionNode;
const isCellWithinRange = this.grid.getSelectedRanges().some((range) => {
if (
node.column >= range.columnStart &&
node.column <= range.columnEnd &&
node.row >= range.rowStart &&
node.row <= range.rowEnd
) {
return true;
}
return false;
});
if (isCellWithinRange) {
this.multiCellArgs = { data: this.multiCellSelection.data };
}
}
this.contextmenuX = eventArgs.event.clientX;
this.contextmenuY = eventArgs.event.clientY;
this.clickedCell = eventArgs.cell;
this.toggleContextMenu();
}
El menú contextual tendrá las siguientes funciones:
- Copia el valor de la celda seleccionada.
- Copie el dataRow de la celda seleccionada.
- Si la celda seleccionada está dentro de un rango de selección de varias celdas, copie todos los datos seleccionados.
public copySelectedRowData() {
const selectedData = this.grid.getRowData(this.clickedCell.id.rowID);
this.copyData(selectedData);
const selectedDataArea = document.getElementById('selectedArea');
selectedDataArea.innerText = JSON.stringify(selectedData);
this.toggleContextMenu();
}
public copySelectedCellData() {
const selectedData = this.clickedCell.value;
this.copyData(selectedData);
const selectedDataArea = document.getElementById('selectedArea');
selectedDataArea.innerText = JSON.stringify(selectedData);
this.toggleContextMenu();
}
public copySelectedData() {
const selectedData = this.grid.getSelectedData();
this.copyData(selectedData);
const selectedDataArea = document.getElementById('selectedArea');
selectedDataArea.innerText = JSON.stringify(selectedData);
this.toggleContextMenu();
}
private 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();
document.execCommand('copy');
document.body.removeChild(tempElement);
}
IgcGridComponent
recuperará los datos copiados y los pegará en un elemento contenedor.
La plantilla que vamos a utilizar para combinar la grilla con el menú contextual:
<div class="container sample">
<div class="wrapper">
<igc-grid auto-generate="false" width="50%" height="100%" name="grid" id="grid">
<igc-column field="ProductID" header="Product ID">
</igc-column>
<igc-column field="ProductName" header="Product Name">
</igc-column>
<igc-column field="UnitsInStock" header="Units In Stock" data-type="number">
</igc-column>
<igc-column field="UnitPrice" header="Units Price" data-type="number">
</igc-column>
<igc-column field="Discontinued" data-type="boolean">
</igc-column>
<igc-column field="OrderDate" header="Order Date" data-type="date">
</igc-column>
</igc-grid>
<div id="selectedArea" class="selected-data-area">
</div>
</div>
</div>
<div id="menu" style="display: none;" class="contextmenu">
<span id="copySingleCell" class="item">
<igc-icon name="content_copy"></igc-icon>Copy Cell Data
</span>
<span id="copyRow" class="item">
<igc-icon name="content_copy"></igc-icon>Copy Row Data
</span>
<span id="copyMultiCells" class="item">
<igc-icon name="content_copy"></igc-icon>Copy Cells Data
</span>
</div>
</div>
Seleccione varias celdas y presione el botón derecho del mouse. Aparecerá el menú contextual y después de seleccionar Copiar datos de celdas, los datos seleccionados aparecerán en el cuadro vacío de la derecha.
El resultado es:
Known Issues and Limitations
Cuando la cuadrícula no tiene primaryKey
establecida y los escenarios de datos remotos están habilitados (al paginar, ordenar, filtrar y desplazar solicitudes de activación a un servidor remoto para recuperar los datos que se mostrarán en la cuadrícula), una fila perderá el siguiente estado después de un dato. solicitud completa:
- Selección de fila
- Fila Expandir/contraer
- Edición de filas
- Fijación de filas
API References
Additional Resources
- Selección de fila
- Selección de celda
- Paginación
- Filtración
- Clasificación
- resúmenes
- Columna en movimiento
- Virtualización y rendimiento
Nuestra comunidad es activa y siempre da la bienvenida a nuevas ideas.