打开页面的时候DataGrid列宽会随着内容自动调整,我现在想在内容变化后再自动调整列宽,比如点查询或者新增,修改后再根据内容调整列宽,有提供对应的API吗
可以用 DataGrid.Column::setWidthAuto
:
// 注入 DataGrid
@Autowired
private DataGrid<Product> highPriceTable;
// 监听 DC 内容的变化
@Subscribe(id = "productDc", target = Target.DATA_CONTAINER)
public void onProductDcCollectionChange(CollectionContainer.CollectionChangeEvent<Product> event) {
setGridColumnAuto("name"); // 设置自动调整 “name” 列的列宽。
}
private void setGridColumnAuto(String... columnNames) {
Stream.of(columnNames).map(highPriceTable::getColumn)
.filter(Objects::nonNull)
.forEach(DataGrid.Column::setWidthAuto);
}
试了下,调用DataGrid.Column::setWidthAuto后,宽度还是没变化
我这边是可以的:
方便上传一个测试项目?
按你的操作尝试了下,如果手动拖动了一下列宽,再查询会自动展开。如果打开页面后没拖动列宽,直接新增或编辑内容,列宽是没变化的
那你在 AfterShow
里面也加上:
@Subscribe
public void onAfterShow(AfterShowEvent event) {
setGridColumnAuto("name");
}
这样还是不行吧。不过大概知道原因了,必须得先至少把某一列设为固定宽度,再设置为自动列宽才会生效,我再想想怎么做合适。