2010-12-03 95 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());