La función de edición de filas Ignite UI for Blazor en Blazor Grid permite editar datos directamente dentro de IgbGrid. Además de esta forma conveniente de manipular datos, hay una API poderosa para operaciones CRUD completas. Puede realizar la edición de filas de la cuadrícula haciendo clic en una fila y presionando la tecla Enter. Otra forma rápida es hacer doble clic con el mouse en la fila que necesita modificarse.
El siguiente ejemplo demuestra cómo habilitar la edición de filas en IgbGrid. Cambiar el valor de una celda y luego hacer clic o navegar a otra celda en la misma fila no actualizará el valor de la fila hasta que se confirme usando el botón Listo o se descarte usando el botón Cancelar.
using System;
using System.Net.Http;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Text;
using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using IgniteUI.Blazor.Controls; // for registering Ignite UI modulesnamespaceInfragistics.Samples
{
publicclassProgram
{
publicstaticasync Task Main(string[] args)
{
var builder = WebAssemblyHostBuilder.CreateDefault(args);
builder.RootComponents.Add<App>("app");
builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
// registering Ignite UI modules
builder.Services.AddIgniteUIBlazor(
typeof(IgbGridModule)
);
await builder.Build().RunAsync();
}
}
}cs
@using IgniteUI.Blazor.Controls<style>/*
CSS styles are loaded from the shared CSS file located at:
https://static.infragistics.com/xplatform/css/samples/
*/#grid {
--ig-size: var(--ig-size-small);
}
</style><divclass="container vertical ig-typography"><divclass="container vertical fill"><IgbGridAutoGenerate="false"Data="NwindData"Name="grid"
@ref="grid"Id="grid"PrimaryKey="ProductID"RowEditable="true"><IgbColumnField="ProductID"Header="Product ID"DataType="GridColumnDataType.Number"></IgbColumn><IgbColumnField="ReorderLevel"Header="Reorder Level"DataType="GridColumnDataType.Number"></IgbColumn><IgbColumnField="ProductName"Header="Prod. Name"DataType="GridColumnDataType.String"></IgbColumn><IgbColumnField="UnitsInStock"Header="Units In Stock"DataType="GridColumnDataType.Number"></IgbColumn><IgbColumnField="OrderDate"Header="Order Date"DataType="GridColumnDataType.Date"PipeArgs="ColumnPipeArgs1"Name="column1"
@ref="column1"></IgbColumn><IgbColumnField="Discontinued"Header="Discontinued"DataType="GridColumnDataType.Boolean"></IgbColumn></IgbGrid></div></div>@code {protectedoverrideasync Task OnAfterRenderAsync(bool firstRender)
{
var grid = this.grid;
var column1 = this.column1;
}
private IgbGrid grid;
private IgbColumn column1;
private IgbColumnPipeArgs _columnPipeArgs1 = null;
public IgbColumnPipeArgs ColumnPipeArgs1
{
get
{
if (this._columnPipeArgs1 == null)
{
var columnPipeArgs1 = new IgbColumnPipeArgs();
columnPipeArgs1.Format = "mediumDate";
this._columnPipeArgs1 = columnPipeArgs1;
}
returnthis._columnPipeArgs1;
}
}
private NwindData _nwindData = null;
public NwindData NwindData
{
get
{
if (_nwindData == null)
{
_nwindData = new NwindData();
}
return _nwindData;
}
}
}razor
/*
CSS styles are loaded from the shared CSS file located at:
https://static.infragistics.com/xplatform/css/samples/
*/#grid {
--ig-size: var(--ig-size-small);
}
css
¿Te gusta esta muestra? Obtenga acceso a nuestro kit de herramientas de Ignite UI for Blazor completo y comience a crear sus propias aplicaciones en minutos. Descárgalo gratis.
Cuando una fila está en modo de edición, al hacer clic en una celda de otra fila, se activará como si se presionara el botón "Listo", enviando todos los cambios realizados en la fila anterior. Si la celda recién enfocada es editable, la nueva fila también entra en modo de edición. Sin embargo, si la celda no es editable, solo la fila anterior sale del modo de edición.
Uso de edición de filas
Defina un IgbGrid con una fuente de datos vinculada y RowEditable establecido en verdadero:
La configuración de la clave principal es obligatoria para las operaciones de edición de filas.
No es necesario habilitar la edición de columnas individuales. Con la propiedad RowEditable en IgbGrid, se podrán editar todas las filas con la propiedad Field definida (excepto la fila principal). Si desea deshabilitar la edición de una columna específica, simplemente establezca la entrada editable de esa columna en false.
IgbGrid utiliza BaseTransactionService, un proveedor interno que mantiene los cambios de celda pendientes hasta que se envía o cancela el estado de la fila.
Posicionamiento
La posición predeterminada de la superposición estará debajo de la fila que está en modo de edición.
Si no hay espacio debajo de la fila, aparecerá una superposición encima de la fila.
Una vez que se muestra, arriba o abajo, la superposición mantendrá esta posición durante el desplazamiento, hasta que se cierre la superposición.
Comportamiento
Si la fila está en modo de edición, la edición continuará si se hace clic en una celda de la misma fila.
Al hacer clic en el botón "Listo", finalizará la edición de la fila y enviará los cambios a la fuente de datos o a una transacción, si está disponible. Además, la fila saldrá del modo de edición.
Al hacer clic en el botón "Cancelar", se revertirán todos los cambios actuales en la fila y la fila saldrá del modo de edición.
Si la fila está en modo de edición, al hacer clic en una celda de otra fila finalizará la edición de la fila actual y se enviarán nuevos cambios en la fila (el mismo comportamiento al hacer clic en el botón "Listo"). Si la nueva celda que recibe el foco es editable, entonces la nueva fila también ingresa al modo de edición, mientras que si la celda no es editable, solo la fila anterior sale del modo de edición.
Si la fila está en modo de edición y se desplaza IgbGrid de modo que esa fila salga del área visible, esta última seguirá en modo de edición. Cuando se desplaza IgbGrid, para que la fila vuelva a ser visible, la fila seguirá en modo de edición. Cuando se hace clic fuera de IgbGrid, la celda también permanecerá en modo de edición.
Al realizar operaciones de clasificación, filtrado, búsqueda y ocultación, se revertirán todos los cambios actuales en la fila y la fila saldrá del modo de edición.
Al realizar operaciones de paginación, cambio de tamaño, fijación y movimiento, saldrá del modo de edición y enviará el último valor.
Cada celda modificada obtiene un estilo editado hasta que finaliza la edición de la fila. Este es el comportamiento cuando IgbGrid no recibe transacciones. Cuando las transacciones están disponibles, se aplica el estilo de edición de celda hasta que se confirmen todos los cambios.
Navegación por teclado
Ingrese y F2 ingresa al modo de edición de filas
Esc sale del modo de edición de filas y no envía ninguno de los cambios de celda realizados mientras la fila estaba en modo de edición.
Tab mueve el foco de una celda editable en la fila a la siguiente y de la celda editable más a la derecha a los botones CANCELAR y LISTO. La navegación desde el botón LISTO va a la celda editable más a la izquierda dentro de la fila actualmente editada.
Integración de funciones
Cualquier operación de cambio de datos finalizará las operaciones de edición de filas y enviará los cambios de filas actuales. Esto incluirá operaciones como ordenar, cambiar criterios de agrupación y filtrado, paginación, etc.
Los resúmenes se actualizarán una vez finalizada la edición de la fila. Lo mismo es válido para otras funciones como ordenar, filtrar, etc.
Expandir y contraer filas agrupadas no finalizará la edición de la fila actual.
Personalización de la superposición de edición de filas
Personalizando el texto
Es posible personalizar el texto de la superposición de edición de filas mediante plantillas.
La propiedad RowChangesCount está expuesta y contiene el recuento de celdas modificadas.
igRegisterScript("RowEditTextTemplate", (ctx) => {
var html = window.igTemplating.html;
return html`<div>
Changes: ${ctx.implicit}
</div>`;
}, false);
razor
Personalización de botones
También es posible personalizar los botones de la superposición de edición de filas mediante plantillas.
Además de los temas predefinidos, la cuadrícula se puede personalizar aún más configurando algunas de las propiedades CSS disponibles. En caso de que desee cambiar algunos de los colores, primero debe establecer una clase para la cuadrícula:
<IgbGridclass="grid"></IgbGrid>razor
Luego configure las propiedades CSS relacionadas para esa clase:
using System;
using System.Net.Http;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Text;
using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using IgniteUI.Blazor.Controls; // for registering Ignite UI modulesnamespaceInfragistics.Samples
{
publicclassProgram
{
publicstaticasync Task Main(string[] args)
{
var builder = WebAssemblyHostBuilder.CreateDefault(args);
builder.RootComponents.Add<App>("app");
builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
// registering Ignite UI modules
builder.Services.AddIgniteUIBlazor(
typeof(IgbGridModule)
);
await builder.Build().RunAsync();
}
}
}cs
@using IgniteUI.Blazor.Controls<style>/*
CSS styles are loaded from the shared CSS file located at:
https://static.infragistics.com/xplatform/css/samples/
*/#grid {
--ig-banner-banner-background: #292826;
--ig-banner-banner-message-color: #ffcd0f;
--ig-button-foreground: #ffcd0f;
--ig-button-hover-foreground: white;
--ig-button-font-weight: 600;
}
</style><divclass="container vertical ig-typography"><divclass="container vertical fill"><IgbGridAutoGenerate="false"Data="NwindData"Name="grid"
@ref="grid"Id="grid"PrimaryKey="ProductID"RowEditable="true"><IgbColumnField="ProductID"Header="Product ID"DataType="GridColumnDataType.Number"></IgbColumn><IgbColumnField="ReorderLevel"Header="Reorder Level"DataType="GridColumnDataType.Number"></IgbColumn><IgbColumnField="ProductName"Header="Prod. Name"DataType="GridColumnDataType.String"></IgbColumn><IgbColumnField="UnitsInStock"Header="Units In Stock"DataType="GridColumnDataType.Number"></IgbColumn><IgbColumnField="OrderDate"Header="Order Date"DataType="GridColumnDataType.Date"PipeArgs="ColumnPipeArgs1"Name="column1"
@ref="column1"></IgbColumn><IgbColumnField="Discontinued"Header="Discontinued"DataType="GridColumnDataType.Boolean"></IgbColumn></IgbGrid></div></div>@code {protectedoverrideasync Task OnAfterRenderAsync(bool firstRender)
{
var grid = this.grid;
var column1 = this.column1;
}
private IgbGrid grid;
private IgbColumn column1;
private IgbColumnPipeArgs _columnPipeArgs1 = null;
public IgbColumnPipeArgs ColumnPipeArgs1
{
get
{
if (this._columnPipeArgs1 == null)
{
var columnPipeArgs1 = new IgbColumnPipeArgs();
columnPipeArgs1.Format = "mediumDate";
this._columnPipeArgs1 = columnPipeArgs1;
}
returnthis._columnPipeArgs1;
}
}
private NwindData _nwindData = null;
public NwindData NwindData
{
get
{
if (_nwindData == null)
{
_nwindData = new NwindData();
}
return _nwindData;
}
}
}razor
/*
CSS styles are loaded from the shared CSS file located at:
https://static.infragistics.com/xplatform/css/samples/
*/#grid {
--ig-banner-banner-background: #292826;
--ig-banner-banner-message-color: #ffcd0f;
--ig-button-foreground: #ffcd0f;
--ig-button-hover-foreground: white;
--ig-button-font-weight: 600;
}
css
Problemas conocidos y limitaciones
Cuando la grilla no tiene PrimaryKey configurada 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 grilla), una fila perderá el siguiente estado después de un dato. solicitud completa: