Visão geral e configuração da grade de dados hierárquica

    A Grade de Dados Hierárquica Ignite UI for React é usada para exibir e manipular dados tabulares hierárquicos. Vincule rapidamente seus dados com muito pouco código ou use uma variedade de eventos para personalizar diferentes comportamentos. Este componente fornece um rico conjunto de recursos, como seleção de dados, filtragem de estilo do Excel, classificação, paginação, modelagem, movimentação de colunas, fixação de colunas, exportação para Excel e CSV e muito mais. A Grade hierárquica baseia-se no componente de grade plana e estende sua funcionalidade, permitindo que os usuários expandam ou recolham as linhas da grade pai, revelando as grades filhas correspondentes, quando informações mais detalhadas são necessárias.

    React Hierarchical Data Grid Example

    Neste exemplo de grade React, você pode ver como os usuários podem visualizar conjuntos hierárquicos de dados e usar modelos de célula para adicionar outros componentes visuais.

    Getting Started with Ignite UI for React Hierarchical Grid

    Dependencies

    Para começar com a grade hierárquica React, primeiro você precisa instalar osigniteui-react pacotes e.igniteui-react-grids

    npm install --save igniteui-react
    npm install --save igniteui-react-grids
    

    Os estilos correspondentes também devem ser referenciados. Você pode escolher a opção clara ou escura para um dos temas e, com base na configuração do seu projeto, importá-lo:

    import 'igniteui-react-grids/grids/themes/light/bootstrap.css'
    

    Para obter mais detalhes sobre como personalizar a aparência da grade hierárquica, você pode dar uma olhada na seção de estilo.

    Using the React Hierarchical Data Grid

    Vinculação de dados

    O IgrHierarchicalGrid deriva do IgrGrid e compartilha a maior parte de suas funcionalidades. A principal diferença é que permite a definição de múltiplos níveis de hierarquia. Eles são configurados por meio de uma tag separada dentro da definição de IgrHierarchicalGrid, chamada IgrRowIsland. O componente IgrRowIsland define a configuração para cada grade filho para o nível específico. Múltiplas ilhas de fileira por nível também são suportadas. A Grade Hierárquica suporta duas formas de vinculação aos dados:

    Using hierarchical data

    Se o aplicativo carregar todos os dados hierárquicos como uma matriz de objetos que fazem referência a matrizes filhas de objetos, a Grade Hierárquica poderá ser configurada para lê-los e vinculá-los automaticamente. Aqui está um exemplo de uma fonte de dados hierárquica estruturada corretamente:

    export const singers = [{
        "Artist": "Naomí Yepes",
        "Photo": "assets/images/hgrid/naomi.png",
        "Debut": "2011",
        "Grammy Nominations": 6,
        "Grammy Awards": 0,
        "Tours": [{
            "Tour": "Faithful Tour",
            "Started on": "Sep-12",
            "Location": "Worldwide",
            "Headliner": "NO",
            "Toured by": "Naomí Yepes"
        }],
        "Albums": [{
            "Album": "Dream Driven",
            "Launch Date": new Date("August 25, 2014"),
            "Billboard Review": "81",
            "US Billboard 200": "1",
            "Artist": "Naomí Yepes",
            "Songs": [{
                "No.": "1",
                "Title": "Intro",
                "Released": "*",
                "Genre": "*",
                "Album": "Dream Driven"
            }]
        }]
    }];
    

    Cada IgrRowIsland deve especificar a chave da propriedade que contém os dados filhos.

    <IgrHierarchicalGrid data={singers} autoGenerate={true}>
        <IgrRowIsland childDataKey="Albums" autoGenerate={true}>
            <IgrRowIsland childDataKey="Songs" autoGenerate={true}>
            </IgrRowIsland>
        </IgrRowIsland>
        <IgrRowIsland childDataKey="Tours" autoGenerate={true}>
        </IgrRowIsland>
    </IgrHierarchicalGrid>
    

    [!NOTE] Note that instead of data the user configures only the childDataKey that the IgrHierarchicalGrid needs to read to set the data automatically.

    Using Load-On-Demand

    A maioria dos aplicativos é projetada para carregar o mínimo de dados possível inicialmente, o que resulta em tempos de carregamento mais rápidos. Nesses casos, IgrHierarchicalGrid pode ser configurado para permitir que serviços criados pelo usuário o alimentem com dados sob demanda.

    import { getData } from "./remoteService";
    
    export default function Sample() {
      const hierarchicalGrid = useRef<IgrHierarchicalGrid>(null);
    
      const gridCreated = (event: IgrGridCreatedEventArgs, _parentKey: string) => {
        const context = event.detail;
        const rowIsland = context.owner;
        const dataState = {
          key: rowIsland.childDataKey,
          parentID: context.parentID,
          parentKey: _parentKey,
          rootLevel: false,
        };
    
        context.grid.isLoading = true;
    
        getData(dataState).then((data: any[]) => {
          context.grid.isLoading = false;
          context.grid.data = data;
          context.grid.markForCheck();
        });
      }
    
      useEffect(() => {
        hierarchicalGrid.current.isLoading = true;
    
        getData({ parentID: null, rootLevel: true, key: "Customers" }).then(
          (data: any) => {
            hierarchicalGrid.current.isLoading = false;
            hierarchicalGrid.current.data = data;
            hierarchicalGrid.current.markForCheck();
          }
        );
      }, []);
    
      return (
        <IgrHierarchicalGrid
            ref={hierarchicalGrid}
            primaryKey="customerId"
            autoGenerate={true}
            height="600px"
            width="100%">
                <IgrRowIsland
                    childDataKey="Orders"
                    primaryKey="orderId"
                    autoGenerate={true}
                    onGridCreated={(e: IgrGridCreatedEventArgs) => gridCreated(e, "Customers")}>
                        <IgrRowIsland
                            childDataKey="Details"
                            primaryKey="productId"
                            autoGenerate={true}
                            onGridCreated={(e: IgrGridCreatedEventArgs) => gridCreated(e, "Orders")}>
                        </IgrRowIsland>
                </IgrRowIsland>
        </IgrHierarchicalGrid>
      );
    }
    
    const URL = `https://data-northwind.indigo.design/`;
    
    export async function getData(dataState: any): Promise<any> {
        const response = await fetch(buildUrl(dataState));
        const data = await response.json();
        return data;
    }
    
    function buildUrl(dataState: any) {
        let qS = "";
        if (dataState) {
            if (dataState.rootLevel) {
                qS += `${dataState.key}`;
            } else {
                qS += `${dataState.parentKey}/${dataState.parentID}/${dataState.key}`;
            }
        }
        return `${URL}${qS}`;
    }
    

    Hide/Show row expand indicators

    Se você tem uma forma de fornecer informações sobre se uma linha tem filhos antes de expandir, pode usar ahasChildrenKey propriedade de entrada. Dessa forma, você poderia fornecer uma propriedade booleana a partir dos objetos de dados que indica se um indicador de expansão deve ser exibido.

    <IgrHierarchicalGrid data={data} primaryKey="ID" hasChildrenKey="hasChildren">
    </IgrHierarchicalGrid>
    

    Note que não é necessário definir ahasChildrenKey propriedade. Caso você não forneça, indicadores de expansão serão exibidos para cada linha.

    Além disso, se você quiser mostrar/esconder o indicador de expandir/colapsar tudo, pode usar ashowExpandAll propriedade. Essa interface é desativada por padrão por razões de desempenho e não é recomendado habilitá-la em grades com grandes volumes de dados ou em grades com carga sob demanda.

    Características

    Os recursos de grade podem ser habilitados e configurados por meio da marcação IgrRowIsland - eles são aplicados a cada grade criada para ele. Alterar as opções em tempo de execução por meio da instância da ilha de linha as altera para cada uma das grades geradas.

    <IgrHierarchicalGrid data={localData} autoGenerate={false}
        allowFiltering={true} height="600px" width="800px">
        <IgrColumn field="ID" pinned={true} filterable={true}></IgrColumn>
        <IgrColumnGroup header="Information">
            <IgrColumn field="ChildLevels"></IgrColumn>
            <IgrColumn field="ProductName" hasSummary={true}></IgrColumn>
        </IgrColumnGroup>
        <IgrRowIsland childDataKey="childData" autoGenerate={false} rowSelection="multiple">
            <IgrColumn field="ID" hasSummary={true} dataType="number"></IgrColumn>
            <IgrColumnGroup header="Information2">
                <IgrColumn field="ChildLevels"></IgrColumn>
                <IgrColumn field="ProductName"></IgrColumn>
            </IgrColumnGroup>
            <IgrPaginator perPage={5}></IgrPaginator>
        <IgrRowIsland>
        <IgrPaginator></IgrPaginator>
    </IgrHierarchicalGrid>
    

    Os seguintes recursos de grade funcionam em um nível por grade, o que significa que cada instância de grade os gerencia independentemente do restante das grades:

    • Classificação
    • Filtragem
    • Paginação
    • Cabeçalhos de várias colunas
    • Escondendo
    • Fixação
    • Movente
    • Resumos
    • Procurar

    Os recursos de Seleção e Navegação funcionam globalmente para toda a Grade Hierárquica

    • Seleção A seleção não permite que as células selecionadas estejam presentes para duas grades filho diferentes ao mesmo tempo.
    • Navegação Ao navegar + , se o elemento next/prev for uma grade filho, a navegação continuará na grade filho relacionada, marcando a célula relacionada como selecionada e focada. Se a célula filho estiver fora da porta de exibição visível atual, ela será rolada para a exibição para que a célula selecionada esteja sempre visível.

    Collapse All Button

    A grade hierárquica permite que os usuários recolham convenientemente todas as suas linhas atualmente expandidas pressionando o botão "Recolher tudo" no canto superior esquerdo. Além disso, cada grade filha que contém outras grades e é uma grade hierárquica em si, também possui esse botão - dessa forma, o usuário pode recolher apenas uma determinada grade na hierarquia:

    unfold_less_icon_screenshot

    Styling

    Além dos temas predefinidos, a grade pode ser personalizada ainda mais definindo algumas das propriedades CSS disponíveis. Caso você queira alterar o plano de fundo do cabeçalho e a cor do texto, você precisa definir uma classe para a grade primeiro:

    <IgrHierarchicalGrid className="grid"></IgrHierarchicalGrid>
    

    Depois, defina as--header-background propriedades e--header-text-color CSS para essa classe:

    .grid {
        --header-background: #494949;
        --header-text-color: #FFF;
    }
    

    Demo

    Known Limitations

    Limitação Descrição
    Agrupar por O recurso Agrupar por não é suportado pela grade hierárquica.

    API References

    Nossa comunidade é ativa e sempre acolhedora para novas ideias.