动态创建GWT CellTable

我遇到了GWT CellTable的问题。 我需要动态创建celltable,而我没有实体(Bean)类。 我已经看过了celltable的所有例子,并且在没有实体类的情况下进行了很多搜索。

我需要根据存储在数据库中的一些元数据动态填充表。 我能够创建表结构

考虑有两个类,一个是GRID,另一个是COLUMN,用于元数据和列定义。 GRID将COLUMNS列表作为列定义

Class GRID { List columns; } Class COLUMN { String columnName; } 

现在我需要从数据库获取网格并循环列以填充单元格(列),如:

 com.google.gwt.user.cellview.client.Column textColumn = new Column( new EditTextCell()) { @Override public String getValue(String object) { return object; } }; 

现在,我需要向celltable添加一些数据。 但没有实体,没有例子如何填充不同的列。 我试过自己的样子:( 考虑网格有3列)

 List data; String a1 = "A1"; String a2 = "A2"; String a3 = "A3"; data = new ArrayList(); data.add(a1); data.add(a2); data.add(a3); final AsyncDataProvider provider = new AsyncDataProvider() { @Override protected void onRangeChanged(HasData display) { updateRowData(0, data); } }; provider.addDataDisplay(grid); provider.updateRowCount(data.size(), true); 

我能够产生如下输出:

 A1 A1 A1 A2 A2 A2 A3 A3 A3 

实际上输出应该只有一行

 A1 A2 A3 

但未能这样做。

请帮忙。

Thankx,

问候,

您可以将“行”表示为List实例,您必须在GridColumn和数据提供程序中将参数化从String更改为List ; 当然,您必须使用List>调用updateRowData ,而不是List

每列还需要一个Column实例,通过索引从List取出值:

 class IndexedColumn extends Column, String> private final int index; public IndexedColumn(int index) { super(new EditTextCell(); this.index = index; } @Override public String getValue(List object) { return object.get(this.index); } } 

我有一个类似的问题需要解决。 作为GWT的初学者,Thomas Broyer的答案对我来说有点抽象,以解决我的问题。 也许这段代码也可以帮助我身边的其他人:

 public class DatGridExDynReady implements EntryPoint { // quick showcase data representation, could be set up more dynamically during // runtime when parsing server response data private static final ArrayList dataRow1 = new ArrayList(); private static final ArrayList dataRow2 = new ArrayList(); private static final ArrayList dataRow3 = new ArrayList(); private static List> data = new ArrayList>(); public void onModuleLoad() { dataRow1.add("1"); dataRow1.add("a"); // quick showcase data dataRow2.add("2"); dataRow2.add("b"); dataRow3.add("3"); dataRow3.add("c"); DatGridExDynReady.data.add(dataRow1); DatGridExDynReady.data.add(dataRow2); DatGridExDynReady.data.add(dataRow3); DataGrid> table = new DataGrid>(); TextCell c1 = new TextCell(); // 1. text column creation showcase Column, String> myC1 = new Column, String>(c1) { public String getValue(List object) { return object.get(0); } }; table.addColumn(myC1, "col1"); TextCell c2 = new TextCell(); // 2. text column creation showcase Column, String> myC2 = new Column, String>(c2) { public String getValue(List object) { return object.get(1); } }; table.addColumn(myC2, "col2"); table.setRowCount(data.size(), true); table.setRowData(0, data); DockLayoutPanel rPanel = new DockLayoutPanel(Unit.PX); rPanel.setSize("100%", "200px"); rPanel.addWest(table, 200); RootPanel.get().add(rPanel); } 

}