3

所以我花了很长时间用 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;
4

3 回答 3

6

当你使用时,DataGrid你需要给它一个明确的大小。因为CellTable你不需要,所以这就是它起作用的原因。

当您使用时,它就DataGrid在那里,但高度和宽度均为0. 所以你要么需要明确设置大小:

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

或者你可以把网格放在一个ProvidesResize小部件中。因此,在您的情况下,我相信您可以使用 aDockLayoutPanel而不是DockPanel您似乎正在使用的 a 。

于 2013-04-26T03:12:55.293 回答
1

我有一个小问题。尝试将数据网格放在实现 ProvidesResize 接口的 Panel 中,如 SimpleLayoutPanel。同样在我的情况下,它有助于设置 SimpleLayoutPanel 的大小。

于 2013-04-26T06:35:54.527 回答
0

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

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

应该

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

我不知道为什么会这样,但确实如此。我现在可以看到我的桌子了。你不应该明确调用我想知道的数据网格实例吗?

于 2013-04-25T22:03:49.383 回答