使用 ShowPivotTableAction

ShowPivotTableAction 是一个特殊的操作,可以从扩展自 ListDataComponent 的组件中导出数据,例如 DataGridTreeDataGrid,以及透视表。

使用该操作最直接的方法是在 dataGrid 中定义并与按钮关联。

<dataGrid id="tipInfoesDataGrid"
          dataContainer="tipInfoesDc"
          minWidth="100px"
          width="100%">
    <actions>
        <action id="showPivotTableAction" type="pvttbl_showPivotTable"/>
    </actions>
</dataGrid>

也可以在视图控制器中编程式创建,然后与按钮关联:

@Subscribe
public void onInit(final InitEvent event) {
    ShowPivotTableAction<TipInfo> showPivotTableAction =
            actions.create(ShowPivotTableAction.ID);
    showPivotTableAction.setTarget(tipInfoesDataGrid);
    showManualSetPivotTableActionButton.setAction(showPivotTableAction);
    showManualSetPivotTableActionButton.setText(
            messages.getMessage(getClass(), "manualSetShowActionButton.text"));
}

ShowPivotTableAction 有两个导出数据的模式:

  • 所有行:导出 DataGridTreeDataGrid 中的所有行。

  • 已选择行:仅导出 DataGridTreeDataGrid 中选中的行。

如果没有选择行,则默认导出所有行。

UI 模式 的透视表会显示在一个新的 tab 中。默认情况下,会显示组件数据容器中的所有属性,但不包括:

  • Collection(集合)类型的属性。

  • byte[](字符数组)类型的属性。

  • UUID 属性。

  • @SystemLevel 注解的属性。

如需排除某些属性或仅包含特定属性子集,请使用 PivotTableViewBuilder Bean,其提供了流式 API 接口,可以在打开的视图中配置数据透视表组件。

实现自定义配置时,在 ActionPerformedEvent 事件监听器中处理:

@Subscribe("tipInfoesDataGrid.customShowPivotTableAction")
public void onCustomShowPivotTableAction(final ActionPerformedEvent event) {
    PivotTableViewBuilder builder = getApplicationContext().getBean(
            PivotTableViewBuilder.class, tipInfoesDataGrid);
    Renderers renderers = new Renderers();
    renderers.setSelectedRenderer(Renderer.TABLE);
    renderers.setRenderers(List.of(Renderer.TABLE, Renderer.TABLE_BAR_CHART, Renderer.HEATMAP,
            Renderer.ROW_HEATMAP, Renderer.COL_HEATMAP));

    builder.withIncludedProperties(Arrays.asList("sex", "smoker", "day", "time")) (1)
            .withRows(Arrays.asList("sex", "smoker"))
            .withColumns(Arrays.asList("day", "time"))
            .withRenderers(renderers)
            .withItems(tipInfoesDataGrid.getItems().getItems()) (2)
            .show();
}
1 withIncludedProperties() 方法仅考虑需要显示包含的属性,忽略其他属性。如需排除特定属性,请使用 withExcludedProperties() 方法。
2 其他以 "with" 开头的方法可由于配置透视表的选项。包括 withHiddenFromAggregations()withHiddenFromDragDrop()withAggregationProperties() 等。

展示的透视表数据可以导出为 Excel(需要支持当前渲染器)。在打开的 tab 中有一个默认的按钮可以用于导出。