2016-09-08 2 views
1

Ich habe eine Tabelle in Vaadin erstellt. Ich wähle Spalten aus der Datenbank aus. Ich brauche eine Spalte, die nacheinander jeder Zeile eine Zahl gibt.Wie man eine fortlaufende Nummer Spalten in Vaadin

Ich bin mit dem

Table table = new Table(); 

Für Grid:

GeneratedPropertyContainer wrappingContainer = new GeneratedPropertyContainer(container); 
      wrappingContainer.addGeneratedProperty("rowHeader", new PropertyValueGenerator<Long>(); 

table.setContainerDataSource(wrappingContainer); 
     table.setColumnOrder("rowHeader", "name", "surname"); 

    layout.addComponent(table); 
+0

Am einfachsten wäre es, Ihre SQL-Abfrage zu ändern, um jetzt eine Nummer zu generieren –

Antwort

1

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.

+0

Dank ist die gleiche Arbeit für Gitter zu .. – dhS

+0

Mit dem Grid verwenden Sie den GeneratedPropertyContainer für diesen Zweck. Sie fügen Ihren Container in den generierten ein, fügen Ihre Zelle ähnlich der obigen Lösung mit 'addGeneratedProperty' hinzu und setzen den Container des Grids auf den GeneratedPropertyContainer. –

+0

danke für die Bearbeitungen ... Ich bekomme alle Spalten mit der Index-Spalte, aber nicht die Daten darin zu bekommen. – dhS

Verwandte Themen