Vaadin - 表列顺序

时间:2013-10-22 21:39:43

标签: vaadin multiple-columns pojo

任何人都知道如何/或可能 - 创建一个具有列特定顺序的表;保存前的配置顺序 - 例如在DB中, 并在特定视图上传?我也想知道如何从POJOS类 - bean中生成这个列标题和内容。

有什么好主意吗?

2 个答案:

答案 0 :(得分:8)

setVisibleColumns

Table::setVisibleColumns执行双重任务:

  • 控制哪些列可见,
  • 设置列的显示顺序。

致电Table::getVisibleColumns查看当前订购。

文档

这在以下内容中有详细描述:

示例代码

基本上,您需要这样的代码来控制列顺序,并将bean实例列表设置为数据源。

代码未经过测试,只是演示。适用于Vaadin 6,但我认为与Vaadin 7相比没有显着变化。

table = new Table();

// Wrap your beans collection into vaadin data container. There are many
// types of them , check Book of Vaadin.    
BeanItemContainer<Bean> container = new BeanItemContainer<Bean>(Bean.class)
container.addBean(new Bean());

// Set collection of your beans as data source. 
// Columns will be created for each property, vaadin uses reflection.
table.setContainerDataSource( container );

// You can select to display only properties you want, not all. 
// Order matters. You can get columns list from any source - for example
// store in your DB.
table.setVisibleColumns( new Object[] {"prop1", "prop2"} );

// You can set column headers (by default vaadin will set them same as bean 
// properties names). Order matters, should match above order.
table.setColumnHeaders( new String[] {"Property 1", "Property2"} );

答案 1 :(得分:2)

The answer之前的{p> Sergey Makarov是正确的。这个答案提供了进一步的信息。

用户重新排序

您可以允许用户在表中拖放列以在运行时重新排序它们。要启用此功能,请致电isColumnReorderingAllowed

当发生此类重新排序事件时,您可以使用listener通知。

用户的重新订购仅适用于此工作会话。如果您希望在将来的工作会话中维护用户的订单,则必须以某种方式保留所需的订单并在再次实例化表时应用订单。

失去订单

如果替换表格的数据源,则会重置列顺序。您可以在更改之前获取当前订单,然后恢复。示例代码如下。

// Visible status & ordering.
java.lang.Object[] visibleColumns = this.exampleTable.getVisibleColumns();

// ------|  Fresh Data  |--------------
// Put fresh data into the Table.
this.exampleTable.setContainerDataSource( freshBeanItemContainer );

// ------|  Restore Config  |--------------
// Visible status & ordering.
this.exampleTable.setVisibleColumns( visibleColumns ); // Assumes the table has the same properties.

顺便说一句,与可见性和顺序一样,折叠也将使用新数据重置。您可能希望跟踪和恢复列折叠以及订购。