当前位置: 首页 > 知识库问答 >
问题:

访问Vaadin 8网格单元格值

扈德容
2023-03-14

我正在从Vaadin 7 Table迁移到Vaadin 8 Grid。在Vaadin 7 Table中,我们使用了IndexedContainer或Container with Property,并且可以使用IndexedContainer.getItem. getItemProperty(itemId). getValue();Container.getContainerProperty(itemId, Property tyId). getValue()访问表单元格值。

瓦丁 8 网格的内容通过网格设置项目(集合

在使用Vaadin 8网格时,有没有办法以类似的方式访问单元格值?

我目前试图找出通过Grid方法访问数据的方法。目前,我有Vaadin 7表代码,我们以通用方式访问单元格值,将数据导出到例如Excel,CSV或PDF:


    Table table = ...; /* Is passed in while initializing and is used as kind of black box in the exporter */ 

    // Compiling cell values
    Object[] visibleColumns = table.getVisibleColumns();
    Container container = table.getContainerDataSource();
    for (Object itemId : container.getItemIds())
    {
        for (Object propertyId : visibleColumns)
        {
            Property property = container.getContainerProperty(itemId, propertyId);
            Object value = property == null ? null : property.getValue();
            buildCell(value);
        }
    }

在瓦丁8中,我拥有网格,我试图适应:


    Grid grid = ...; // Passed in while initializing

    // Compiling cell values
    List visibleColumns = new ArrayList();
    List columns = table.getColumns();
    for(Iterator iterator = columns.iterator(); iterator.hasNext();)
    {
        Column column = iterator.next();
        if (!column.isHidden())
        {
            visibleColumns.add(column);
        }
    }

    // The Grid gets a Collection set as items, so I assume the rows should be ListDataProvider
    ListDataProvider listContainer = (ListDataProvider)grid.getDataProvider();
    Collection items = listContainer.getItems();
    for (/* Now I should be able to get the stored values in each row, but I assume I need the data types ... */)
    {
        for (Column column : visibleColumns)
        {
            String propertyId = column.getId(); // Could be null if no ID is given
            /* At least here I'd like to have access to the cell value */
        }
    }

共有2个答案

周睿范
2023-03-14

首先,我将回答问题,然后展示我的解决方案。

@rmuller 网格值用于以 XLS、CSV 或 PDF 格式导出。

由于导出需要处理网格中使用的每种类型的数据,因此整个实现需要通用。导出需要处理分级数据(TreeDataProvider)以及仅列出的数据(ListDataProvider

最后,到目前为止,我继续使用更简单的ListDataProvider

DataProvider dataProvider = grid.getDataProvider();
ListDataProvider listContainer = (ListDataProvider) dataProvider;
List<Grid.Column> columns = grid.getColumns();
for (Grid.Column column : columns)
{
    for (Object item : listContainer.getItems())
    {
        ValueProvider valueProvider = column.getValueProvider();
        Object appliedValue = valueProvider.apply(item);
        String sValue = appliedValue == null ? null : appliedValue.toString()
    }
}

蒋星雨
2023-03-14

这在很大程度上取决于您要如何处理数据/单元格,但这是我的镜头:

首先:Vaadin8网格是一个通用类型,所以像网格一样

使用数据提供程序。从Grid < code > Grid . get data provider()获取它,或者您已经可以直接访问它了。

您可以拥有一个< code >流

例如:

Stream<Entity> streamEntities = g.getDataProvider().fetch(new Query<>());
streamEntities.forEach( entity -> {
   entity.getStuff();   // THE POINT IS HERE
                        // no cell value but entitys field by getter
   addAsCsvRow(entity); // example of some method you might implement
                        // to process outside lambda
});

注意

  • 您可以在构建Query以获取或使用流过滤器streamEntities.filter(…)
  • 时通过添加谓词来过滤实体
  • 如果Grid/DataProvider在您访问它时是原始类型,您需要一些转换(Entity)并且仍然需要有关实体类型的知识。
  • 如果不熟悉Stream一个List可能会更舒服List

 类似资料:
  • 问题内容: 如何从ui网格单元模板进行访问?这是我的控制器代码: 在此处查看其运行情况:http : //plnkr.co/edit/WYXeQShHWKDYDs4MIZnP?p=preview 我希望单元格内容显示“ hello world”,但它们仅显示“ hello”。 问题答案: 根据http://ui-grid.info/docs/#/tutorial/305_appScope,网格具有

  • 我正在使用顺风CSS,并试图建立一个网格,使某些单元格内容跨越多个单元格,而其他项目留在单个单元格。在下面的代码中,我试图展示我正在尝试完成的事情。我知道我的col-span-2班什么也没做,但我把它放在那里是为了表明我希望我能做什么。我想让所有的单元格都是相同的宽度(我只想让一些单元格内容跨越分隔线)。我需要某种覆盖逻辑吗? 感谢任何帮助。 谢谢!

  • pre { white-space: pre-wrap; } 数据网格(datagrid)经常需要合并一些单元格。本教程将向您展示如何在数据网格(datagrid)中合并单元格。 为了合并数据网格(datagrid)单元格,只需简单地调用 'mergeCells' 方法,并传入合并信息参数,告诉数据网格(datagrid)如何合并单元格。在所有合并的单元格中,除了第一个单元格,其它单元格在合并后被

  • 单击包含< code>VerticalLayout行等组件的Vaadin 8 中的单元格时,不会选中该行(使用Vaadin 8.1.5)。 如果组件未填充整个单元格,则单击单元格中未使用的区域会使该行处于选中状态。 我一直在研究如何将点击组件转发到单元格点击侦听器,但尚未对此有任何控制。猜猜这甚至不是最好的方法。 解决方案是什么?

  • 插入文字 插入链接 插入公式 插入日期 插入本地图片 自动过滤 冻结单元格 合并单元格 行单元格样式 列单元格样式

  • 我正在尝试用Apache POI读取Excel文件。我的目标是从每一行获得单元格2&3,并将它们放入一个数组。在某些行中,单元格3是空的(我不是说空的、空的或空白的)。如果您在Excel中检查它们,则只需为空。 其中一些空单元格(不是全部)在线程“main”java.lang.NullPointerException中导致nullPonterException:Exception。在尝试获取单元格