Verwenden einer generierten Spalte für das:
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 ... */);
Sie erhalten die Zeilennummer aus dem Behälter. Die Tabelle muss jedoch mit einem Container arbeiten, der die indizierte Subschnittstelle implementiert, z. B. BeanItemContainer oder IndexedContainer.
Dies ist, was Sie das Grid Sie mit:
// 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... */);
Wenn Sie ein PropertyValueGenerator<Long>
verwenden Sie einen NumberRenderer
für diese Art einstellen müssen. grid.getColumn("index").setRenderer(new NumberRenderer("%d"));
wird den Trick machen.
Am einfachsten wäre es, Ihre SQL-Abfrage zu ändern, um jetzt eine Nummer zu generieren –