我有一个表阶段,其中包含引用存储库表的值。在存储库中,每个值都有一个订单号。
通常在 SQL 中,我会加入它们,然后按 order 列排序。但是,如果我想在 Vaadin 中执行此操作,我必须使用FreeFormQuery
来进行此连接。
问题是我希望允许用户更改表阶段中的值。所以我需要实施FreeFormQueryDelegate
. 有没有办法通过使用标准TableQuery
而不是标准来完成这项工作FreeFormQuery
?
也许手动移动表中的行?
Vaadin 为表格提供了一些排序选项。
您可以对一个特定的 propertyId 进行排序,也可以对一组属性进行排序。
// sort one container property Id
table.setSortContainerPropertyId(propertyId);
table.setSortAscending(ascending);
table.sort();
// sort several property Ids
table.sort(propertyId[], ascending[]);
注意:上面的代码不是正确的代码,而是显示方法体。
我使用以下代码重新排列 vaadin 表格行,当单击“上移”按钮时,同时选择表格行。
Object selectedItemId = fieldTable.getValue();
if(selectedItemId != null){
List<Object> items = new ArrayList<>(fieldTable.getItemIds());
int index = items.indexOf(selectedItemId);
if(index < 1){
LOGGER.info("Selected Filed is at the top, cannot move up further");
return;
}
//Rearrange itemids for new order
Object upperRow= items.set(index - 1, selectedItemId);
items.set(index, upperRow);
items.forEach(itemId -> {
//Gets the properties of old table item
Item item = fieldTable.getItem(itemId);
String name = (String) item.getItemProperty(Constants.PROPERTYID_FIELD_NAME).getValue();
Button toggleBtn = (Button) item.getItemProperty(Constants.PROPERTYID_SORT_BUTTON).getValue();
//Remove the old table item
fieldTable.removeItem(itemId);
//Insert old table item into the new position index
Item newItem = fieldTable.addItem(itemId);
newItem.getItemProperty(Constants.PROPERTYID_FIELD_NAME).setValue(name);
newItem.getItemProperty(Constants.PROPERTYID_SORT_BUTTON).setValue(toggleBtn);
int position = items.indexOf(itemId);
if(position == index - 1) {
fieldTable.select(itemId);
}
});
}