所以我有一段时间用GWT创建一个Datagrid.我根据GWT的文档创建了我的表,并且我已经添加了我的数据,但我无法得到它或者数据网格本身就显示出来了.我错过了什么?我觉得我一直在撕扯我的头发.我觉得做一个aysnc调用可能是一个问题,但我没有错误.当我编译并执行我的代码的这部分时,屏幕上没有显示任何内容,并且数据网格应该在Dock上的区域是空的.我忘记了一些微不足道的事吗?
static int orderID = 1001;
private static List<OrderLine> orderLineList = new ArrayList<OrderLine>();
final DataGrid<OrderLine> dgOrder = new DataGrid<OrderLine>();
dgOrder.setWidth("100%");
//set columns
TextColumn<OrderLine> orderLineIdColumn = new TextColumn<OrderLine>(){
@Override
public String getValue(OrderLine object) {
return Integer.toString(object.getOrderLineID());
}
};
dgOrder.addColumn(orderLineIdColumn, "OrderLine ID");
TextColumn<OrderLine> productColumn = new TextColumn<OrderLine>(){
@Override
public String getValue(OrderLine object) {
return getProductName(object.getProductNumber());
}
};
dgOrder.addColumn(productColumn, "Product");
TextColumn<OrderLine> quantityColumn = new TextColumn<OrderLine>(){
@Override
public String getValue(OrderLine object) {
return Integer.toString(object.getQuantity());
}
};
dgOrder.addColumn(quantityColumn, "Quantity");
// add data to datagrid
Ioma.dataservice.getOrderLines(orderID, new AsyncCallback<ArrayList<OrderLine>>(){
@Override
public void onFailure(Throwable caught) {// TODO Auto-generated method stub
System.out.println("error in retrieving GP.getOrderLines" + caught.toString());
}
@Override
public void onSuccess(ArrayList<OrderLine> result) {
// TODO Auto-generated method stub
//yes i realize I could also set it to "result" but I use the result in other places as well, I have also tried setting it to result with no success
orderLineList = result;
dgOrder.setRowData(0, orderLineList);
}
});
//add datagrid to the dock
dock.add(dgOrder, DockPanel.EAST);
//add dock to mainPanel
return dock;
Run Code Online (Sandbox Code Playgroud)
当你使用时,DataGrid你需要给它一个明确的大小.因为CellTable你不需要这就是为什么它有效.
当你使用的DataGrid是那里,但有高度和宽度0.所以你要么需要明确设置大小:
DataGrid<OrderLine> grid = new DataGrid<OrderLine>;
grid.setWidth("500px");
grid.setHeight("600px");
dock.add(dgOrder, DockPanel.EAST);
Run Code Online (Sandbox Code Playgroud)
或者你可以将网格放在一个ProvidesResize小部件中.所以在你的情况下,我相信你可以使用它DockLayoutPanel而不是DockPanel你似乎正在使用它.