Using Grid with inline data
Instead of using a Vaadin Container as explained in Using Grid With a Container, you can also directly add simple inline data to Grid without directly using a Container.
After creating a Grid instance, the first thing you need to do is to define the columns that should be shown. You an also define the types of the data in each column - Grid will expect String data in each column unless you do this.
grid.addColumn("Name").setSortable(true);
grid.addColumn("Score", Integer.class);
The columns will be shown in the order they are added. The addColumn
method does also return the created Column
instance, so you can go ahead
and configure the column right away if you want to.
When you have added all columns, you can add data using the
addRow(Object…)
method.
grid.addRow("Alice", 15);
grid.addRow("Bob", -7);
grid.addRow("Carol", 8);
grid.addRow("Dan", 0);
grid.addRow("Eve", 20);
The order of the arguments to addRow
should match the order in which the
columns are shown. It is recommended to only use addRow
when
initializing Grid, since later on e.g. setColumnOrder(Object…)
might
have been used to change the order, causing unintended behavior.
Grid will still manage a Container
instance for you behind the scenes,
so you can still use Grid API that is based on Property
or Item
from the
Container
API. One particularly useful feature is that each added row
will get an Integer
item id, counting up starting from 1. This means
that you can e.g. select the second row in this way:
grid.select(2);
Full example
Putting all these pieces together, we end up with this class.
import com.vaadin.annotations.Theme;
import com.vaadin.server.VaadinRequest;
import com.vaadin.shared.ui.grid.HeightMode;
import com.vaadin.ui.Grid;
import com.vaadin.ui.UI;
@Theme("valo")
public class ShowingInlineDataInGrid extends UI {
@Override
protected void init(VaadinRequest request) {
final Grid grid = new Grid();
grid.addColumn("Name").setSortable(true);
grid.addColumn("Score", Integer.class);
grid.addRow("Alice", 15);
grid.addRow("Bob", -7);
grid.addRow("Carol", 8);
grid.addRow("Dan", 0);
grid.addRow("Eve", 20);
grid.select(2);
grid.setHeightByRows(grid.getContainerDataSource().size());
grid.setHeightMode(HeightMode.ROW);
setContent(grid);
}
}