我正在从Vaadin 7 Table迁移到Vaadin 8 Grid . 在Vaadin 7表中,我们使用了IndexedContainer或Container with Property,可以使用 IndexedContainer.getItem(propertyId).getItemProperty(itemId).getValue();
或 Container.getContainerProperty(itemId, propertyId).getValue()
访问表格单元格值 .
Vaadin 8 Grid的内容通过 Grid.setItems(Collection<T>)
设置 . 我找到了如何访问列 - Grid.getColumns()
- 和数据提供程序 - Grid.getDataProvider()
. 但我没有找到一种方法来组合它们并获得特定细胞的 Value ......
使用Vaadin 8 Grid时,有没有办法以类似的方式访问单元格值?
更新:
我目前试图找出通过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);
}
}
在Vaadin 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 */
}
}
1 回答
这取决于你将如何处理数据/单元格,但这是我的镜头:
首先:Vaadin8
Grid
是一个generic
类型,所以像Grid<Entity>
一样,同样适用于DataProvider<Entity>
.使用数据提供者 . 从Grid
grid.getDataProvider()
获取它,或者您可以直接访问它 .您可以通过应用
dataSource.fetch(new Query<>())
获得Stream<Entity>
. 并使用流循环或查找或任何东西 .例如:
注意
你可以通过在构造
Query
时获取谓词来过滤entites,以便获取或使用流过滤器streamEntities.filter(...)
当你访问
Grid
/DataProvider
是原始类型时,你需要一些铸造(Entity)
并且仍然知道实体类型 .如果不熟悉
Stream
aList
可能会更舒服List<Entity> list = streamEntities.collect(Collectors.toList());