Blazor Tree Grid State Persistence

    La Ignite UI for Blazor Persistencia de Estado en Blazor Tree Grid permite a los desarrolladores guardar y restaurar fácilmente el estado de la cuadrícula. Cuando se aplicaIgbGridState en el BlazorIgbTreeGrid, expone losGetStateAsStringAsync métodos yApplyStateFromStringAsync que los desarrolladores pueden usar para lograr persistencia de estado en cualquier escenario.

    Supported Features

    IgbGridStateSoporta guardar y restaurar el estado de las siguientes características:

    • Sorting
    • Filtering
    • Filtrado avanzado
    • Paginación
    • CellSelection
    • RowSelection
    • ColumnSelection
    • RowPinning
    • Expansión
    • GroupBy
    • Columns
      • Multi column headers
      • Orden de columnas
      • Propiedades de columna definidas por laIColumnState interfaz.

    Usage

    DevuelveGetStateAsStringAsync una cadena JSON serializada, así que los desarrolladores pueden simplemente usarla y guardarla en cualquier almacenamiento de datos (base de datos, nube, navegador localStorage, etc.).

    El desarrollador puede optar por obtener solo el estado de una determinada característica o características, pasando una matriz con nombres de características como argumento. La matriz vacía dará como resultado el uso de las opciones de estado predeterminadas.

    <IgbTreeGrid>
        <IgbGridState @ref="gridState"></IgbGridState>
    </IgbTreeGrid>
    
    @code {
        // get all features` state in a serialized JSON string
        string stateString = gridState.GetStateAsStringAsync(new string[0]);
    
        // get the sorting and filtering expressions
        string sortingFilteringStates = gridState.GetStateAsStringAsync(new string[] { "sorting", "filtering" });
    }
    

    ApplyStateFromStringAsync- El método acepta una cadena JSON serializada como argumento y restaurará el estado de cada característica encontrada en la cadena JSON o características especificadas como segundo argumento.

    gridState.ApplyStateFromStringAsync(gridStateString, new string[0]);
    gridState.ApplyStateFromStringAsync(sortingFilteringStates, new string[0])
    

    ElOptions objeto implementa laIgbGridStateOptions interfaz, es decir, para cada clave, que es el nombre de una determinada característica, existe el valor booleano que indica si este estado de la característica será rastreado.GetStateAsStringAsync Los métodos no pondrán el estado de estas características en el valor devuelto yApplyStateFromStringAsync los métodos no restaurarán el estado para ellas.

    gridState.Options = new IgbGridStateOptions
        {
            CellSelection = false,
            Sorting = false
        };
    

    Las APIs de punto único, sencillas de usar, permiten lograr una funcionalidad de persistencia completa de estado en solo unas pocas líneas de código. Copia y pega el código de abajo: guardará el estado de la cuadrícula en el objeto del navegadorLocalStorage cada vez que el usuario salga de la página actual. Cada vez que el usuario regresa a la página principal, el estado de la cuadrícula se restaurará. Ya no hace falta configurar esos complejos filtrados avanzados y ordenar expresiones cada vez para obtener los datos que quieres: hazlo una vez y el código de abajo hace el resto por tus usuarios:

    @using IgniteUI.Blazor.Controls
    @using Newtonsoft.Json
    @implements IDisposable
    
    @inject IJSRuntime JS
    @inject NavigationManager Navigation
    
    <IgbTreeGrid Rendered="OnGridRendered">
        <IgbGridState @ref="gridState"></IgbGridState>
        <IgbColumn Field="ContactName" Header="Name" MinWidth="200px" ></IgbColumn>
        <IgbColumn Field="ContactTitle" Header="Title" MinWidth="200px" Sortable="true" Filterable="true" Groupable="true"></IgbColumn>
        <IgbColumn Field="CompanyName" Header="Company" MinWidth="200px" Sortable="true" Filterable="true" Groupable="true"></IgbColumn>
    </IgbTreeGrid>
    
    @code {
        protected override void OnAfterRender(bool firstRender)
        {
            Navigation.LocationChanged += OnLocationChanged;
        }
    
        void OnLocationChanged(object sender, LocationChangedEventArgs e)
        {
            SaveGridState();
        }
    
        void IDisposable.Dispose()
        {
            // Unsubscribe from the event when our component is disposed
            Navigation.LocationChanged -= OnLocationChanged;
        }
    
        void OnGridRendered()
        {
            RestoreGridState();
        }
    
        async void SaveGridState() {
            string state = gridState.GetStateAsStringAsync(new string[0]);
            await JS.InvokeVoidAsync("window.localStorage.setItem", "grid-state", state);
        }
    
        async void RestoreGridState() {
            string state = await JS.InvokeAsync<string>("window.localStorage.getItem", "grid-state");
            if (state) {
                gridState.ApplyStateFromStringAsync(state, new string[0]);
            }
        }
    }
    

    Demo

    Limitations

    • GetStateAsStringel método utiliza JSON.stringify() para convertir los objetos originales en una cadena JSON. JSON.stringify() no soporta Functions, por eso elIgbGridState Component ignorará las columnasFormatter,Filters,Summaries,SortStrategy,CellClasses,CellStyles,HeaderTemplate yBodyTemplate Propiedades.