2012-11-16 23 views
0

我有我的數據作爲Map<Key,ArrayList<Value>>所以我想讓我的col1代表我的關鍵字和其他列來表示我的值中的數據。而這個值可以是多行。所以我正在考慮在celltable中放置一個celltable,但是這會影響我的頭文件(因爲外層celltable的列數只會是2),也會影響我的頭文件的排序。GWT在地圖上的數據表

而且,如果我直接將地圖傳遞給ListDataProvider,它假定行數是地圖的行數,但事實並非如此。

那麼最好的方法是什麼?

回答

0

我建議使用一類RowObject這樣的:

class RowObject { 
    private final Key key; 
    private final Value value; 

    RowObject(Key key, Value value) { 
     this.key = key; 
     this.value = value; 
    } 

    /* Getters omitted */ 
} 

然後,地圖轉換爲RowObjects的列表,並且在列表中的數據提供:

List<RowObject> rowObjects = new ArrayList<RowObject>(); 

for (Entry<Key, ArrayList<Value>> entry : map.entrySet()) { 
    for (Value value : entry.getValue()) { 
     rowObjects.add(new RowObject(entry.getKey(), value)); 
    } 
} 

ListDataProvider<RowObject> dataProvider = new ListDataProvider<RowObject>(); 
dataProvider.addDataDisplay(cellTable); 
dataProvider.setList(rowObjects); 

添加列像這個:

Column column = new Column<RowObject, String>(new TextCell()) { 

    @Override 
    public String getValue(RowObject object) { 
     return getStringValueFor(object); 
    } 
}; 

cellTable.addColumn(column);