В таблице данных GWT не отображаются данные

#gwt #datagrid

#gwt #datagrid

Вопрос:

я пытался реализовать datagrid в своем проекте, проблема в том, что в таблице данных не отображаются данные, данные есть, но их не видно, я попытался проверить html-страницу и, добавив некоторую высоту и ширину к внутренним разделам внутри родительского раздела datagrid, данные отображаются идеальноя могу сделать это с помощью css, и это сделано, но если есть другое решение или, другими словами, кто-нибудь знает, что не так с datagrid?

 public class DataGridTest implements EntryPoint, ClickHandler {

private ListDataProvider<TestObject> listProvider;


public void onModuleLoad() {
    List<TestObject> list = new ArrayList<TestObject>();
    list.add(new TestObject("Amer",22));
    list.add(new TestObject("Essa",25));
    list.add(new TestObject("Asem",29));


    DataGrid<TestObject> dataGrid = new DataGrid<TestObject>();
    dataGrid.setStyleName("dataGridTest");
    TextColumn<TestObject> nameColumn = new TextColumn<TestObject>(){

        @Override
        public String getValue(TestObject object) {
            return object.getName();
        }

    };

    dataGrid.addColumn(nameColumn,"Name");

    TextColumn<TestObject> ageColumn = new TextColumn<TestObject>(){

        @Override
        public String getValue(TestObject object) {
            return object.getAge() "";
        }

    };

    dataGrid.addColumn(ageColumn,"Age");

    listProvider = new ListDataProvider<TestObject>();
    listProvider.addDataDisplay(dataGrid);
    listProvider.setList(list);
    LayoutPanel layoutPanel = new LayoutPanel();
    layoutPanel.add(dataGrid);
    RootPanel.get().add(layoutPanel);
    layoutPanel.forceLayout();
    Button btn = new Button("lala");
    btn.getElement().getStyle().setPosition(Position.ABSOLUTE);
    RootPanel.get().add(btn);
    btn.addClickHandler(this);

}


public class TestObject {

    private String name;

    private int age;

    public TestObject(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return this.name;
    }

    public int getAge() {
        return this.age;
    }

}


@Override
public void onClick(ClickEvent event) {
    listProvider.getList().add(new TestObject("lala", 10));

}
  

}

Комментарии:

1. Какова высота вашей сетки данных при ее проверке?

Ответ №1:

Вы смешиваете RootPanel и LayoutPanel , что не работает.
Вместо этого вы должны использовать RootLayoutPanel .
Необходимо DataGrid поместить в a LayoutPanel , и должна быть непрерывная цепочка до RootLayoutPanel .

В качестве альтернативы вы должны указать явные размеры (высоту, ширину) в родительском контейнере вашего DataGrid или использовать CellTable вместо.

RootLayoutPanel.get().add(layoutPanel) должно устранить вашу проблему.

Комментарии:

1. Спасибо, решение RootLayoutPanel работает отлично, но я не предпочитаю его, потому что у меня есть цепочка виджетов для доступа к корневой панели, поэтому было бы сложно использовать это решение, решение celltable не работает, потому что я уже использую его, и я хочу его изменить, я попытался указать размеры для родительского элементасетки и не работал .

2. Вы можете попробовать использовать ResizeLayoutPanel . Это LayoutPanel не требует непрерывной цепочки и обеспечивает изменение размера ее дочернего элемента. Однако я бы настоятельно рекомендовал использовать RootLayoutPanel вместе с LayoutPanels для вашей структуры приложения. После этого вы можете использовать обычный FlowPanel HTMLPanel и DIVs внутри него, и если вам нужно изменить размер, вы также можете поместить a ResizeLayoutPanel внутри FlowPanel или DIV