私たちが行う場合はvaadinテーブルで
table.setRowHeaderMode(RowHeaderMode.INDEX);
行インデックスを持つ列を取得します。
vaadin グリッドで同じことは可能ですか?
私たちが行う場合はvaadinテーブルで
table.setRowHeaderMode(RowHeaderMode.INDEX);
行インデックスを持つ列を取得します。
vaadin グリッドで同じことは可能ですか?
これまでのところ、そのようなオプションは見たことがありませんが、生成された列でそれを偽造できるはずです。以下の単純な実装を参照してください(改善と提案は大歓迎です)。
// 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));
}
これにより、以下の画像のようなものが生成されます。
Vaadin 18 flow
私は以下を使用し、完全に機能することに言及する価値があります。
grid.addColumn(TemplateRenderer.of("[[index]]")).setHeader("#");
わかりました、これを理解するのにしばらく時間がかかりました。なぜこれが必要なのかわかりませんが、目的がクリックされたグリッド行を見つけることである場合、リスナーのイベントを介してコントロールのデータソースからインデックスを取得できます。itemClick
私の場合、私のデータソースは でありSQLContainer
、すでに利用可能であったため ( ds
var を参照)、次のようにしました。
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();