如何在 Vaadin 中制作序列号列
How to make a sequential number columns in Vaadin
我在 vaadin 中创建了一个 table。我正在从数据库中选择列。我需要一列按顺序给每一行编号。
我正在使用
Table table = new Table();
对于网格:
GeneratedPropertyContainer wrappingContainer = new GeneratedPropertyContainer(container);
wrappingContainer.addGeneratedProperty("rowHeader", new PropertyValueGenerator<Long>();
table.setContainerDataSource(wrappingContainer);
table.setColumnOrder("rowHeader", "name", "surname");
layout.addComponent(table);
为此使用生成的列:
table.addGeneratedColumn("index", new ColumnGenerator(){
@Override
public Object generateCell(final Table source, final Object itemId, final Object columnId)
{
Container.Indexed container = (Container.Indexed) source.getContainerDataSource();
return Integer.toString(container.indexOfId(itemId));
}
});
// add it to the start of the visible columns
table.setVisibleColumns("index", /* other columns ... */);
您从容器中获取行号。
table 虽然必须与实现 Indexed 子接口的容器一起使用,例如 BeanItemContainer 或 IndexedContainer。
这就是您使用网格所做的事情:
// the GeneratedPropertyContainer is a decorator for the original container
final GeneratedPropertyContainer gpc = new GeneratedPropertyContainer(container);
grid.setContainerDataSource(gpc);
gpc.addGeneratedProperty("index", new PropertyValueGenerator<String>(){
@Override
public String getValue(final Item item, final Object itemId, final Object propertyId)
{
// get the index from the original container
final Container.Indexed indexContainer = (Container.Indexed) container;
return Integer.toString(indexContainer.indexOfId(itemId));
}
@Override
public Class<String> getType()
{
return String.class;
}
});
// ...
grid.setColumnOrder("index", /* the other property IDs... */);
如果您使用 PropertyValueGenerator<Long>
,则需要为该类型设置 NumberRenderer
。 grid.getColumn("index").setRenderer(new NumberRenderer("%d"));
会成功的。
我在 vaadin 中创建了一个 table。我正在从数据库中选择列。我需要一列按顺序给每一行编号。
我正在使用
Table table = new Table();
对于网格:
GeneratedPropertyContainer wrappingContainer = new GeneratedPropertyContainer(container);
wrappingContainer.addGeneratedProperty("rowHeader", new PropertyValueGenerator<Long>();
table.setContainerDataSource(wrappingContainer);
table.setColumnOrder("rowHeader", "name", "surname");
layout.addComponent(table);
为此使用生成的列:
table.addGeneratedColumn("index", new ColumnGenerator(){
@Override
public Object generateCell(final Table source, final Object itemId, final Object columnId)
{
Container.Indexed container = (Container.Indexed) source.getContainerDataSource();
return Integer.toString(container.indexOfId(itemId));
}
});
// add it to the start of the visible columns
table.setVisibleColumns("index", /* other columns ... */);
您从容器中获取行号。 table 虽然必须与实现 Indexed 子接口的容器一起使用,例如 BeanItemContainer 或 IndexedContainer。
这就是您使用网格所做的事情:
// the GeneratedPropertyContainer is a decorator for the original container
final GeneratedPropertyContainer gpc = new GeneratedPropertyContainer(container);
grid.setContainerDataSource(gpc);
gpc.addGeneratedProperty("index", new PropertyValueGenerator<String>(){
@Override
public String getValue(final Item item, final Object itemId, final Object propertyId)
{
// get the index from the original container
final Container.Indexed indexContainer = (Container.Indexed) container;
return Integer.toString(indexContainer.indexOfId(itemId));
}
@Override
public Class<String> getType()
{
return String.class;
}
});
// ...
grid.setColumnOrder("index", /* the other property IDs... */);
如果您使用 PropertyValueGenerator<Long>
,则需要为该类型设置 NumberRenderer
。 grid.getColumn("index").setRenderer(new NumberRenderer("%d"));
会成功的。