我有一个阶段表,其中包含引用存储库表的值。在存储库中,每个值都有一个订单号。
通常在SQL中,我会加入它们,然后按顺序列排序。但如果我想在Vaadin中这样做,我必须使用FreeFormQuery
进行此连接。
问题是我想允许用户更改表阶段中的值。所以我需要实现FreeFormQueryDelegate
。有没有办法通过使用标准TableQuery
代替FreeFormQuery
来实现这项工作?
也许手动移动表格中的行?
答案 0 :(得分:15)
Vaadin为表提供了一些排序选项。
您可以对一个特定的propertyId进行排序,也可以对一组属性进行排序。
// sort one container property Id
table.setSortContainerPropertyId(propertyId);
table.setSortAscending(ascending);
table.sort();
// sort several property Ids
table.sort(propertyId[], ascending[]);
注意:上面的代码没有正确的代码,而是显示方法体。
答案 1 :(得分:0)
我使用关注代码重新排列vaadin表行,当“Move Up”按钮单击时,同时选择一个表行。
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);
}
});
}