0

私たちが行う場合はvaadinテーブルで

table.setRowHeaderMode(RowHeaderMode.INDEX);

行インデックスを持つ列を取得します。

vaadin グリッドで同じことは可能ですか?

4

5 に答える 5

3

これまでのところ、そのようなオプションは見たことがありませんが、生成された列でそれを偽造できるはずです。以下の単純な実装を参照してください(改善と提案は大歓迎です)。

// our grid with a bean item container
Grid grid = new Grid();
BeanItemContainer<Person> container = new BeanItemContainer<>(Person.class);

// wrap the bean item container so we can generated a fake header column
GeneratedPropertyContainer wrappingContainer = new GeneratedPropertyContainer(container);
wrappingContainer.addGeneratedProperty("rowHeader", new PropertyValueGenerator<Long>() {
    private long index = 0;

    @Override
    public Long getValue(Item item, Object itemId, Object propertyId) {
        return index++;
    }

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

// assign the data source to the grid and set desired column order
grid.setContainerDataSource(wrappingContainer);
grid.setColumnOrder("rowHeader", "name", "surname");

// tweak it a bit - definitely needs more tweaking
grid.getColumn("rowHeader").setHeaderCaption("").setHidable(false).setEditable(false).setResizable(false).setWidth(30);

// freeze the fake header column to prevent it from scrolling horizontally
grid.setFrozenColumnCount(1);

// add dummy data
layout.addComponent(grid);
for (int i = 0; i < 20 ; i++) {
    container.addBean(new Person("person " + i, "surname " + i));
}

これにより、以下の画像のようなものが生成されます。

シミュレートされた行ヘッダー

于 2016-01-12T15:55:03.640 に答える
1

Vaadin 18 flow私は以下を使用し、完全に機能することに言及する価値があります。

grid.addColumn(TemplateRenderer.of("[[index]]")).setHeader("#");
于 2021-01-14T13:19:10.360 に答える
0

わかりました、これを理解するのにしばらく時間がかかりました。なぜこれが必要なのかわかりませんが、目的がクリックされたグリッド行を見つけることである場合、リスナーのイベントを介してコントロールのデータソースからインデックスを取得できます。itemClick

私の場合、私のデータソースは でありSQLContainer、すでに利用可能であったため ( dsvar を参照)、次のようにしました。

grid.addListener(new ItemClickEvent.ItemClickListener() {
    @Override
    public void itemClick(ItemClickEvent event) {               
        Object itemId = event.getItemId();
        int indexOfRow = ds.indexOfId(itemId);                      
    }       
});

通常、コンストラクターを介して、またはプロパティを設定することにより、コントロールを初期化するときにデータソースをコントロールに追加します。すでにアタッチされているデータソースを使用してどこかからグリッドを取得した場合は、次のような方法でいつでも取得できます。

SQLContainer ds = (SQLContainer)gred.getContainerDataSource();
于 2016-12-29T10:44:23.097 に答える