无法显示GWT DataGrid

时间:2013-04-25 21:10:47

标签: java gwt datagrid

所以我有时间用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;

3 个答案:

答案 0 :(得分:5)

当您使用DataGrid时,您需要为其指定明确的大小。对于CellTable,您不需要这样就可以了。

当你使用DataGrid时,那里有0的高度和宽度。所以你要么需要明确设置大小:

DataGrid<OrderLine> grid = new DataGrid<OrderLine>;
grid.setWidth("500px");
grid.setHeight("600px");
dock.add(dgOrder, DockPanel.EAST);

或者您可以将网格放在ProvidesResize窗口小部件中。因此,在您的情况下,我相信您可以使用DockLayoutPanel,而不是DockPanel,这是您似乎正在使用的。

答案 1 :(得分:1)

我有一个smilliar problem。尝试将datagrid放在实现ProvideResize接口的Panel中,如SimpleLayoutPanel。同样在我的例子中,它有助于设置SimpleLayoutPanel的大小。

答案 2 :(得分:0)

原来我的问题是我的声明。

 final DataGrid<OrderLine> dgOrder = new DataGrid<OrderLine>();

应该是

final CellTable<OrderLine> dgOrder = new CellTable<OrderLine>();

我无法找出原因,但确实如此。我现在可以看到我的桌子。你不应该明确地调用datagrid的实例我想知道吗?