0

vaadin でテーブルを作成しました。データベースから列を選択しています。すべての行に順番に番号を付ける列が必要です。

私は使用しています

  Table table = new Table();

グリッドの場合:

 GeneratedPropertyContainer wrappingContainer = new GeneratedPropertyContainer(container);
            wrappingContainer.addGeneratedProperty("rowHeader", new PropertyValueGenerator<Long>();

 table.setContainerDataSource(wrappingContainer);
        table.setColumnOrder("rowHeader", "name", "surname");

  layout.addComponent(table);
4

1 に答える 1

1

そのために生成された列を使用します。

table.addGeneratedColumn("index", new ColumnGenerator(){
    @Override
    public Object generateCell(final Table source, final Object itemId, final Object columnId)
    {
        Container.Indexed container = (Container.Indexed) source.getContainerDataSource();
        return Integer.toString(container.indexOfId(itemId));
    }
});

// add it to the start of the visible columns
table.setVisibleColumns("index", /* other columns ... */);

コンテナから行番号を取得します。ただし、テーブルは、BeanItemContainer や IndexedContainer など、Indexed サブインターフェースを実装するコンテナと連携する必要があります。

これは、グリッドを使用して行うことです。

// the GeneratedPropertyContainer is a decorator for the original container
final GeneratedPropertyContainer gpc = new GeneratedPropertyContainer(container);
grid.setContainerDataSource(gpc);
gpc.addGeneratedProperty("index", new PropertyValueGenerator<String>(){
    @Override
    public String getValue(final Item item, final Object itemId, final Object propertyId)
    {
        // get the index from the original container
        final Container.Indexed indexContainer = (Container.Indexed) container;
        return Integer.toString(indexContainer.indexOfId(itemId));
    }

    @Override
    public Class<String> getType()
    {
        return String.class;
    }
});

// ...

grid.setColumnOrder("index", /* the other property IDs... */);

a を使用する場合は、そのタイプにPropertyValueGenerator<Long>a を設定する必要があります。トリックを行います。NumberRenderergrid.getColumn("index").setRenderer(new NumberRenderer("%d"));

于 2016-09-08T07:40:34.717 に答える