我正在从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 */
}
}
首先,我将回答问题,然后展示我的解决方案。
@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()
}
}
这在很大程度上取决于您要如何处理数据/单元格,但这是我的镜头:
首先: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。在尝试获取单元格