#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
внутри него, и если вам нужно изменить размер, вы также можете поместить aResizeLayoutPanel
внутриFlowPanel
илиDIV