2010-12-03 9 views

Respuesta

4

Obtenga el índice del elemento de la lista envuelta por su ListDataProvider. De esta manera:

final CellTable<Row> table = new CellTable<Row>(); 
final ListDataProvider<Row> dataProvider = new ListDataProvider<Starter.Row>(getList()); 
dataProvider.addDataDisplay(table); 

TextColumn<Row> numColumn = new TextColumn<Starter.Row>() { 

    @Override 
    public String getValue(Row object) { 
     return Integer.toString(dataProvider.getList().indexOf(object) + 1); 
    } 
}; 

Ver here para el resto del ejemplo.

+1

¿Es también posible hacer con AsyncDataProvider? – Opal

+0

Lo cambié a indexOf() + 1, porque la mayoría de los usuarios esperan que la primera fila sea "1" y no "0". –

+0

Como ingeniero de software, tiendo a estar en desacuerdo. Pero está bien de todos modos :). – z00bs

2

La solución de z00bs es incorrecta, porque el número de fila calcula desde el índice del objeto en la Lista de datos. Por ejemplo, para la Lista de cadenas con elementos: ["Str1", "Str2", "Str2"], los números de fila serán [1, 2, 2]. Está mal.

Esta solución usa el índice de fila en la tabla de celdas para el número de fila.

public class RowNumberColumn extends Column { 

    public RowNumberColumn() { 
     super(new AbstractCell() { 
      @Override 
      public void render(Context context, Object o, SafeHtmlBuilder safeHtmlBuilder) { 
       safeHtmlBuilder.append(context.getIndex() + 1); 
      } 
     }); 
    } 

    @Override 
    public String getValue(Object s) { 
     return null; 
    } 
} 

y

cellTable.addColumn(new RowNumberColumn()); 
Cuestiones relacionadas