Class TreeGrid<T>

java.lang.Object
com.vaadin.flow.component.Component
com.vaadin.flow.component.grid.Grid<T>
com.vaadin.flow.component.treegrid.TreeGrid<T>
Type Parameters:
T - the grid bean type
All Implemented Interfaces:
com.vaadin.flow.component.AttachNotifier, com.vaadin.flow.component.BlurNotifier<Grid<T>>, com.vaadin.flow.component.DetachNotifier, com.vaadin.flow.component.Focusable<Grid<T>>, com.vaadin.flow.component.FocusNotifier<Grid<T>>, com.vaadin.flow.component.HasElement, com.vaadin.flow.component.HasEnabled, com.vaadin.flow.component.HasSize, com.vaadin.flow.component.HasStyle, com.vaadin.flow.component.HasTheme, com.vaadin.flow.data.event.SortEvent.SortNotifier<Grid<T>,GridSortOrder<T>>, com.vaadin.flow.data.provider.HasDataGenerators<T>, com.vaadin.flow.data.provider.HasDataView<T,Void,GridDataView<T>>, com.vaadin.flow.data.provider.HasLazyDataView<T,Void,GridLazyDataView<T>>, com.vaadin.flow.data.provider.HasListDataView<T,GridListDataView<T>>, com.vaadin.flow.data.provider.hierarchy.HasHierarchicalDataProvider<T>, Serializable

@JsModule("@vaadin/grid/src/vaadin-grid-tree-toggle.js") @JsModule("./treeGridConnector.ts") public class TreeGrid<T> extends Grid<T> implements com.vaadin.flow.data.provider.hierarchy.HasHierarchicalDataProvider<T>
Tree Grid is a component for displaying hierarchical tabular data grouped into expandable and collapsible nodes. Tree Grid is an extension of the Grid component and all Grid’s features are available in Tree Grid as well.
Author:
Vaadin Ltd
See Also:
  • Constructor Details

    • TreeGrid

      public TreeGrid()
      Creates a new TreeGrid without support for creating columns based on property names. Use an alternative constructor, such as TreeGrid(Class), to create a TreeGrid that automatically sets up columns based on the type of presented data.
    • TreeGrid

      protected TreeGrid(int pageSize, Grid.DataCommunicatorBuilder<T,GridArrayUpdater> dataCommunicatorBuilder)
      Creates a new TreeGrid without support for creating columns based on property names. Use an alternative constructor, such as TreeGrid(Class), to create a TreeGrid that automatically sets up columns based on the type of presented data.
      Parameters:
      pageSize - the page size. Must be greater than zero.
      dataCommunicatorBuilder - Builder for DataCommunicator implementation this Grid uses to handle all data communication.
    • TreeGrid

      public TreeGrid(Class<T> beanType)
      Creates a new TreeGrid with an initial set of columns for each of the bean's properties. The property-values of the bean will be converted to Strings. Full names of the properties will be used as the column keys and the property captions will be used as the column headers.
      Parameters:
      beanType - the bean type to use, not null
    • TreeGrid

      public TreeGrid(Class<T> beanType, boolean autoCreateColumns)
      Creates a new TreeGrid with an initial set of columns for each of the bean's properties. The property-values of the bean will be converted to Strings. Full names of the properties will be used as the column keys and the property captions will be used as the column headers.

      When autoCreateColumns is true, only the direct properties of the bean are included, and they will be in alphabetical order. Use Grid.setColumns(String...) to define which properties to include and in which order. You can also add a column for an individual property with Grid.addColumn(String). Both of these methods support also sub-properties with dot-notation, e.g. "property.nestedProperty".

      Parameters:
      beanType - the bean type to use, not null
      autoCreateColumns - when true, columns are created automatically for the properties of the beanType
    • TreeGrid

      protected TreeGrid(Class<T> beanType, Grid.DataCommunicatorBuilder<T,GridArrayUpdater> dataCommunicatorBuilder)
      Creates a new TreeGrid with an initial set of columns for each of the bean's properties. The property-values of the bean will be converted to Strings. Full names of the properties will be used as the column keys and the property captions will be used as the column headers.
      Parameters:
      beanType - the bean type to use, not null
      dataCommunicatorBuilder - Builder for DataCommunicator implementation this Grid uses to handle all data communication.
    • TreeGrid

      public TreeGrid(com.vaadin.flow.data.provider.hierarchy.HierarchicalDataProvider<T,?> dataProvider)
      Creates a new TreeGrid using the given HierarchicalDataProvider, without support for creating columns based on property names. Use an alternative constructor, such as TreeGrid(Class), to create a TreeGrid that automatically sets up columns based on the type of presented data.
      Parameters:
      dataProvider - the data provider, not null
  • Method Details

    • initConnector

      protected void initConnector()
      Overrides:
      initConnector in class Grid<T>
    • setUniqueKeyDataGenerator

      public void setUniqueKeyDataGenerator(String propertyName, com.vaadin.flow.function.ValueProvider<T,String> uniqueKeyProvider)
      Sets property name and value provider for unique key in row's generated JSON.

      Default property name is 'key' and value is generated by bean's hashCode method.

      Parameters:
      propertyName - Property name in JSON data
      uniqueKeyProvider - Value provider for the target property in JSON data
    • addExpandListener

      public com.vaadin.flow.shared.Registration addExpandListener(com.vaadin.flow.component.ComponentEventListener<ExpandEvent<T,TreeGrid<T>>> listener)
      Adds an ExpandEvent listener to this TreeGrid.
      Parameters:
      listener - the listener to add
      Returns:
      a registration for the listener
      See Also:
    • addCollapseListener

      public com.vaadin.flow.shared.Registration addCollapseListener(com.vaadin.flow.component.ComponentEventListener<CollapseEvent<T,TreeGrid<T>>> listener)
      Adds a CollapseEvent listener to this TreeGrid.
      Parameters:
      listener - the listener to add
      Returns:
      a registration for the listener
      See Also:
    • setDataProvider

      public void setDataProvider(com.vaadin.flow.data.provider.DataProvider<T,?> dataProvider)
      Deprecated.
      use setDataProvider(HierarchicalDataProvider), HasHierarchicalDataProvider.setItems(Collection, ValueProvider), HasHierarchicalDataProvider.setItems(Stream, ValueProvider) or HasHierarchicalDataProvider.setTreeData(TreeData) instead.
      Tree grid only supports hierarchical data providers. Use setDataProvider(HierarchicalDataProvider) instead.

      This method is inherited from Grid and has been marked as deprecated to indicate that it is not supported. This method will throw an UnsupportedOperationException.

      Overrides:
      setDataProvider in class Grid<T>
      Parameters:
      dataProvider - the data provider
    • setDataProvider

      public void setDataProvider(com.vaadin.flow.data.provider.hierarchy.HierarchicalDataProvider<T,?> hierarchicalDataProvider)
      Specified by:
      setDataProvider in interface com.vaadin.flow.data.provider.hierarchy.HasHierarchicalDataProvider<T>
    • setItems

      @Deprecated public GridLazyDataView<T> setItems(com.vaadin.flow.data.provider.BackEndDataProvider<T,Void> dataProvider)
      Deprecated.
      use setDataProvider(HierarchicalDataProvider), HasHierarchicalDataProvider.setItems(Collection, ValueProvider), HasHierarchicalDataProvider.setItems(Stream, ValueProvider) or HasHierarchicalDataProvider.setTreeData(TreeData) instead.
      Tree grid does not support data views. Use setDataProvider(HierarchicalDataProvider) instead.

      This method is inherited from Grid and has been marked as deprecated to indicate that it is not supported. This method will throw an UnsupportedOperationException.

      Specified by:
      setItems in interface com.vaadin.flow.data.provider.HasLazyDataView<T,Void,GridLazyDataView<T>>
      Overrides:
      setItems in class Grid<T>
      Parameters:
      dataProvider - the data provider
      Returns:
      the data view
    • setItems

      @Deprecated public GridLazyDataView<T> setItems(com.vaadin.flow.data.provider.CallbackDataProvider.FetchCallback<T,Void> fetchCallback)
      Deprecated.
      use setDataProvider(HierarchicalDataProvider), HasHierarchicalDataProvider.setItems(Collection, ValueProvider), HasHierarchicalDataProvider.setItems(Stream, ValueProvider) or HasHierarchicalDataProvider.setTreeData(TreeData) instead.
      Tree grid supports only hierarchical data so use another method instead.

      This method is inherited from Grid and has been marked as deprecated to indicate that it is not supported. This method will throw an UnsupportedOperationException.

      Specified by:
      setItems in interface com.vaadin.flow.data.provider.HasLazyDataView<T,Void,GridLazyDataView<T>>
      Parameters:
      fetchCallback - the fetch callback
      Returns:
      the data view
    • setItems

      @Deprecated public GridListDataView<T> setItems(com.vaadin.flow.data.provider.ListDataProvider<T> dataProvider)
      Deprecated.
      use setDataProvider(HierarchicalDataProvider), HasHierarchicalDataProvider.setItems(Collection, ValueProvider), HasHierarchicalDataProvider.setItems(Stream, ValueProvider) or HasHierarchicalDataProvider.setTreeData(TreeData) instead.
      Tree grid supports only hierarchical data providers so use another method instead.

      This method is inherited from Grid and has been marked as deprecated to indicate that it is not supported. This method will throw an UnsupportedOperationException.

      Specified by:
      setItems in interface com.vaadin.flow.data.provider.HasListDataView<T,GridListDataView<T>>
      Overrides:
      setItems in class Grid<T>
      Parameters:
      dataProvider - the data provider
      Returns:
      the data view
    • setItems

      @Deprecated public GridListDataView<T> setItems(T... items)
      Deprecated.
      use setDataProvider(HierarchicalDataProvider), HasHierarchicalDataProvider.setItems(Collection, ValueProvider), HasHierarchicalDataProvider.setItems(Stream, ValueProvider) or HasHierarchicalDataProvider.setTreeData(TreeData) instead.
      Tree grid supports only hierarchical data so use another method instead.

      This method is inherited from Grid and has been marked as deprecated to indicate that it is not supported. This method will throw an UnsupportedOperationException.

      Specified by:
      setItems in interface com.vaadin.flow.data.provider.HasListDataView<T,GridListDataView<T>>
      Parameters:
      items - the items to display, not null
      Returns:
      the data view
    • setItems

      @Deprecated public GridListDataView<T> setItems(Collection<T> items)
      Deprecated.
      use setDataProvider(HierarchicalDataProvider), HasHierarchicalDataProvider.setItems(Collection, ValueProvider), HasHierarchicalDataProvider.setItems(Stream, ValueProvider) or HasHierarchicalDataProvider.setTreeData(TreeData) instead.
      Tree grid supports only hierarchical data, so use another method instead.

      This method is inherited from Grid and has been marked as deprecated to indicate that it is not supported. This method will throw an UnsupportedOperationException.

      Specified by:
      setItems in interface com.vaadin.flow.data.provider.HasListDataView<T,GridListDataView<T>>
      Parameters:
      items - the items to display, not null
      Returns:
      the data view
    • getListDataView

      @Deprecated public GridListDataView<T> getListDataView()
      Deprecated.
      not supported
      Tree grid does not support list data view.

      This method is inherited from Grid and has been marked as deprecated to indicate that it is not supported. This method will throw an UnsupportedOperationException.

      Specified by:
      getListDataView in interface com.vaadin.flow.data.provider.HasListDataView<T,GridListDataView<T>>
      Overrides:
      getListDataView in class Grid<T>
      Returns:
      exception is thrown
    • getLazyDataView

      @Deprecated public GridLazyDataView<T> getLazyDataView()
      Deprecated.
      not supported
      Tree grid does not support list data view.

      This method is inherited from Grid and has been marked as deprecated to indicate that it is not supported. This method will throw an UnsupportedOperationException.

      Specified by:
      getLazyDataView in interface com.vaadin.flow.data.provider.HasLazyDataView<T,Void,GridLazyDataView<T>>
      Overrides:
      getLazyDataView in class Grid<T>
      Returns:
      exception is thrown
    • getGenericDataView

      @Deprecated public GridDataView<T> getGenericDataView()
      Deprecated.
      not supported
      Tree grid does not support list data view.

      This method is inherited from Grid and has been marked as deprecated to indicate that it is not supported. This method will throw an UnsupportedOperationException.

      Specified by:
      getGenericDataView in interface com.vaadin.flow.data.provider.HasDataView<T,Void,GridDataView<T>>
      Overrides:
      getGenericDataView in class Grid<T>
      Returns:
      exception is thrown
      See Also:
    • addHierarchyColumn

      public Grid.Column<T> addHierarchyColumn(com.vaadin.flow.function.ValueProvider<T,?> valueProvider)
      Adds a new Hierarchy column to this Grid with a value provider. The value is converted to String when sent to the client by using String.valueOf(Object).

      Hierarchy column is rendered by using 'vaadin-grid-tree-toggle' web component.

      Parameters:
      valueProvider - the value provider
      Returns:
      the created hierarchy column
    • addComponentHierarchyColumn

      public <V extends com.vaadin.flow.component.Component> Grid.Column<T> addComponentHierarchyColumn(com.vaadin.flow.function.ValueProvider<T,V> componentProvider)
      Adds a new Hierarchy column that shows components.

      NOTE: Using ComponentRenderer is not as efficient as the built in renderers.

      Type Parameters:
      V - the component type
      Parameters:
      componentProvider - a value provider that will return a component for the given item
      Returns:
      the new column
      See Also:
    • setHierarchyColumn

      public Grid.Column<T> setHierarchyColumn(String propertyName)
      Note: This method can only be used for a TreeGrid created from a bean type with TreeGrid(Class).

      Resets columns and their order based on bean properties.

      This is a shortcut for removing all columns and then calling Grid.addColumn(String) for each property except hierarchy column in the bean and addHierarchyColumn(String) for the given propertyName.

      Previous column order is preserved.

      You can add columns for nested properties with dot notation, eg. "property.nestedProperty"

      Note that this also resets the headers and footers.

      Parameters:
      propertyName - a target hierarchy column property name
      Returns:
      the created hierarchy column
    • setHierarchyColumn

      public Grid.Column<T> setHierarchyColumn(String propertyName, com.vaadin.flow.function.ValueProvider<T,?> valueProvider)
      Note: This method can only be used for a TreeGrid created from a bean type with TreeGrid(Class).

      Resets columns and their order based on bean properties.

      This is a shortcut for removing all columns and then calling Grid.addColumn(String) for each property except hierarchy column in the bean and addHierarchyColumn(String) or addHierarchyColumn(ValueProvider) for the given propertyName.

      Previous column order is preserved.

      You can add columns for nested properties with dot notation, eg. "property.nestedProperty"

      Note that this also resets the headers and footers.

      Parameters:
      propertyName - a target hierarchy column property name
      valueProvider - optional value provider
      Returns:
      the created hierarchy column
    • setColumns

      public Grid.Column<T> setColumns(String hierarchyPropertyName, com.vaadin.flow.function.ValueProvider<T,?> valueProvider, Collection<String> propertyNames)
      Note: This method can only be used for a TreeGrid created from a bean type with TreeGrid(Class).

      Sets the columns and their order based on the given properties.

      This is a shortcut for removing all columns and then calling Grid.addColumn(String) for each property except hierarchy property in the bean and addHierarchyColumn(String) for the given hierarchyPropertyName.

      You can add columns for nested properties with dot notation, eg. "property.nestedProperty"

      Note that this also resets the headers and footers.

      Parameters:
      hierarchyPropertyName - a target hierarchy column property name
      valueProvider - optional value provider
      propertyNames - set of properties to create columns for. Including given hierarchyPropertyName
      Returns:
      the hierarchy column
    • expand

      public void expand(T... items)
      Expands the given items.

      If an item is currently expanded, does nothing. If an item does not have any children, does nothing.

      Parameters:
      items - the items to expand
    • expand

      public void expand(Collection<T> items)
      Expands the given items.

      If an item is currently expanded, does nothing. If an item does not have any children, does nothing.

      Parameters:
      items - the items to expand
    • expand

      protected void expand(Collection<T> items, boolean userOriginated)
      Expands the given items.
      Parameters:
      items - the items to expand
      userOriginated - true if a ExpandEvent triggered by this operation is user originated, false otherwise.
    • expandRecursively

      public void expandRecursively(Stream<T> items, int depth)
      Expands the given items and their children recursively until the given depth.

      depth describes the maximum distance between a given item and its descendant, meaning that expandRecursively(items, 0) expands only the given items while expandRecursively(items, 2) expands the given items as well as their children and grandchildren.

      Parameters:
      items - the items to expand recursively
      depth - the maximum depth of recursion
      Since:
      8.4
    • expandRecursively

      public void expandRecursively(Collection<T> items, int depth)
      Expands the given items and their children recursively until the given depth.

      depth describes the maximum distance between a given item and its descendant, meaning that expandRecursively(items, 0) expands only the given items while expandRecursively(items, 2) expands the given items as well as their children and grandchildren.

      Parameters:
      items - the items to expand recursively
      depth - the maximum depth of recursion
      Since:
      8.4
    • collapse

      public void collapse(T... items)
      Collapse the given items.

      For items that are already collapsed, does nothing.

      Parameters:
      items - the collection of items to collapse
    • collapse

      public void collapse(Collection<T> items)
      Collapse the given items.

      For items that are already collapsed, does nothing.

      Parameters:
      items - the collection of items to collapse
    • collapse

      protected void collapse(Collection<T> items, boolean userOriginated)
      Collapse the given items.
      Parameters:
      items - the collection of items to collapse
      userOriginated - true if a CollapseEvent triggered by this operation is user originated, false otherwise.
    • collapseRecursively

      public void collapseRecursively(Stream<T> items, int depth)
      Collapse the given items and their children recursively until the given depth.

      depth describes the maximum distance between a given item and its descendant, meaning that collapseRecursively(items, 0) collapses only the given items while collapseRecursively(items, 2) collapses the given items as well as their children and grandchildren.

      Parameters:
      items - the items to collapse recursively
      depth - the maximum depth of recursion
      Since:
      8.4
    • collapseRecursively

      public void collapseRecursively(Collection<T> items, int depth)
      Collapse the given items and their children recursively until the given depth.

      depth describes the maximum distance between a given item and its descendant, meaning that collapseRecursively(items, 0) collapses only the given items while collapseRecursively(items, 2) collapses the given items as well as their children and grandchildren.

      Parameters:
      items - the items to collapse recursively
      depth - the maximum depth of recursion
      Since:
      8.4
    • getItemsWithChildrenRecursively

      protected Collection<T> getItemsWithChildrenRecursively(Collection<T> items, int depth)
      Gets given items and their children recursively until the given depth.

      depth describes the maximum distance between a given item and its descendant, meaning that getItemsWithChildrenRecursively(items, 0) gets only the given items while getItemsWithChildrenRecursively(items, 2) gets the given items as well as their children and grandchildren.

      Parameters:
      items - the items to expand recursively
      depth - the maximum depth of recursion
      Returns:
      collection of given items and their children recursively until the given depth
    • isExpanded

      public boolean isExpanded(T item)
      Returns whether a given item is expanded or collapsed.
      Parameters:
      item - the item to check
      Returns:
      true if the item is expanded, false if collapsed
    • getDataCommunicator

      public com.vaadin.flow.data.provider.hierarchy.HierarchicalDataCommunicator<T> getDataCommunicator()
      Description copied from class: Grid
      Returns the data communicator of this Grid.
      Overrides:
      getDataCommunicator in class Grid<T>
      Returns:
      the data communicator, not null
    • getDataProvider

      public com.vaadin.flow.data.provider.hierarchy.HierarchicalDataProvider<T,com.vaadin.flow.function.SerializablePredicate<T>> getDataProvider()
      Description copied from class: Grid
      Returns the data provider of this grid.

      To get information and control over the items in the grid, use either Grid.getListDataView() or Grid.getLazyDataView() instead.

      Specified by:
      getDataProvider in interface com.vaadin.flow.data.provider.hierarchy.HasHierarchicalDataProvider<T>
      Overrides:
      getDataProvider in class Grid<T>
      Returns:
      the data provider of this grid, not null
    • scrollToIndex

      public void scrollToIndex(int index)
      Scrolls to the index of an item so that the row is shown at the start of the visible area whenever possible. The way the index parameter is interpreted depends on the hierarchy format of the current data provider:

      HierarchicalDataProvider.HierarchyFormat.NESTED: the index refers to an item in the root level. To reach items in deeper levels, use scrollToIndex(int...), which accepts a hierarchical path.

      HierarchicalDataProvider.HierarchyFormat.FLATTENED: the index refers to an item in the entire flattened tree, not only the root level, allowing items at any expanded level to be reached with this method.

      If the index exceeds the valid range, scrolling stops at the last available item.

      Overrides:
      scrollToIndex in class Grid<T>
      Parameters:
      index - zero based index of the item to scroll to
    • scrollToIndex

      public void scrollToIndex(int... path)
      Scrolls to a nested item specified by its hierarchical path.

      The hierarchical path is an array of zero-based indexes, where each index refers to a child of the item at the previous index. Scrolling continues until it reaches the last index in the array or encounters a collapsed item.

      For example, given &#123; 2, 1, ... &#125; as the path, the component will first try to scroll to the item at index 2 in the root level. If that item is expanded, it will then try to scroll to the item at index 1 among its children, and so forth.

      This method is only supported for data providers that use HierarchicalDataProvider.HierarchyFormat.NESTED. For HierarchicalDataProvider.HierarchyFormat.FLATTENED, use scrollToIndex(int) with a flat index instead.

      Parameters:
      path - an array of indexes representing the path to the target item
      Throws:
      IllegalArgumentException - if the path is empty
      UnsupportedOperationException - if the data provider uses a hierarchy format other than HierarchicalDataProvider.HierarchyFormat.NESTED
    • scrollToEnd

      public void scrollToEnd()
      Description copied from class: Grid
      Scrolls to the last data row of the grid.
      Overrides:
      scrollToEnd in class Grid<T>
    • scrollToItem

      public void scrollToItem(T item)
      Scrolls to the given item unless it is already fully visible. Before scrolling, this method automatically expands all ancestor items leading to the target item, but it does not fire any ExpandEvent while doing so.

      For this method to work, the data provider must implement two methods:

      invalid reference
      HierarchicalDataProvider#getParent(T)
      and
      invalid reference
      HierarchicalDataProvider#getItemIndex(T, HierarchicalQuery)
      .

      Depending on the type of data provider, some of these methods may already be implemented. Otherwise, you have to implement them manually. The table below shows which methods are required in each case:

      DataProvider isInMemory()
      invalid reference
      getItemIndex(item, query)
      invalid reference
      getParent(item)
      TreeDataProvider true not required not required
      HierarchicalDataProvider true not required required
      HierarchicalDataProvider false required required
      Overrides:
      scrollToItem in class Grid<T>
      Parameters:
      item - the item to scroll to
      Throws:
      NoSuchElementException - if the item does not belong to the tree
    • refreshViewport

      protected void refreshViewport()
      Overrides:
      refreshViewport in class Grid<T>