2010-12-03 88 views

回答

4

从包含您的ListDataProvider的列表中获取元素的索引。像这样:

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); 
    } 
}; 

查看here的其他例子。

+1

是否也可以被用做AsyncDataProvider? – Opal 2010-12-06 09:27:58

2

来自z00bs的解决方案是错误的,因为从数据列表中的对象索引计算行数。例如,对于带有元素的字符串列表:[“Str1”,“Str2”,“Str2”],行号将为[1,2,2]。这是错误的。

该解决方案使用celltable中的行索引作为行号。

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; 
    } 
} 

cellTable.addColumn(new RowNumberColumn());