如何在GWT中合并两个单元格表的内容

时间:2014-01-13 21:46:23

标签: gwt

我有一个CellTables列表。如何合并两个表的行并返回结果。 例如

List<CellTable> cellTables = new ArrayList<CellTable>();
celltables.add(table1);
celltables.add(table2);
celltables.add(table3);

我正在使用以下方法

private CellTable fetchAllCellTables() {
            CellTable table=new CellTable();
            for(CellTable tempTable:cellTables){
                    int numRows = tempTable.getRowCount();
                    table.setRowCount(numRows+1);
                    table.setRowData((List) tempTable.getLayoutData());
            }
            return table;

    }

但我无法看到总内容。

2 个答案:

答案 0 :(得分:2)

我假设您想制作一个显示小表行的大表:

table1                       table2
col1 | col2 | col3           col1 | col2 | col3 | col4
------------------           -------------------------
a    | b    | c              1    | 2    | 3    | 4

big table
col1 | col2 | col3 | col1 | col2 | col3 | col4
----------------------------------------------
a    | b    | c    | 1    | 2    | 3    | 4

与例如

CellTable<String[]> table1 = new CellTable<String[]>();
table1.addColumn( new Column<String[], String>(new TextCell()){

    public String getValue(String[] object){
        return object[0];
    }

}, "col1"); 

此解决方案仅在您可以编辑构建小表的源代码时才有效!

我首先要定义一个行对象类,它包含大表中单行的全部信息,例如。

public class RowObject{

    public String[] table1RowObject; // the class of the field should be the generic
                                     // type of the table1 CellTable

    public MyObject table2RowObject; // the class of the field should
                                     // be the generic type of table2

    // ... other tables

}

现在将小表的泛型类型更改为RowObject

CellTable<RowObject> table1 = new CellTable<RowObject>();
table1.addColumn ( new Column<RowObject, String>(new TextCell()){

    public String getValue(RowObject object){
        // The data of table1 has been moved into the table1RowObject
        // old: String[] object; return object[0];
        return object.table1RowObject[0];
    }

}, "col1" );

然后可以很容易地构建大表:​​

CellTable<RowObject> bigTable = new CellTable<RowObject>();
for (CellTable<RowObject> ct : tablesList){
    for (int i = 0; i < ct.getColumnCount(); i++)
        bigTable.addColumn( ct.getColumn(i) );
}

在数据提供者的帮助下同时加载所有表的数据,例如

ListDataProvider<RowObject> dataSource = new ListDataProvider<RowObject>();
dataSource.addDataDisplay( table1 );
dataSource.addDataDisplay( table2 );
dataSource.addDataDisplay( bigTable );

然后只要更新dataSource,所有小表就会与大表同时更新。

答案 1 :(得分:1)

我认为这里最好的方法是为每个DataProvider以及最终CellTable使用CellTable

示例代码:

// Create a CellList.
CellList<String> cellList = new CellList<String>(new TextCell());

// Create a data provider.
MyDataProvider dataProvider = new MyDataProvider();

// Add the cellList to the dataProvider.
dataProvider.addDataDisplay(cellList);

// Get the underlying list from data dataProvider.
List<String> list = dataProvider.getList();

// Add the value to the list. The dataProvider will update the cellList.
list.add(newValue); // you can do this in a loop so that you merge all values

对于使用List CellTable的情况,您必须同样保留ListDataProvider