如何订购Vaadin Table Rows?

时间:2012-11-01 16:22:32

标签: java sql vaadin

我有一个阶段表,其中包含引用存储库表的值。在存储库中,每个值都有一个订单号。

通常在SQL中,我会加入它们,然后按顺序列排序。但如果我想在Vaadin中这样做,我必须使用FreeFormQuery进行此连接。

问题是我想允许用户更改表阶段中的值。所以我需要实现FreeFormQueryDelegate。有没有办法通过使用标准TableQuery代替FreeFormQuery来实现这项工作?

也许手动移动表格中的行?

2 个答案:

答案 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);
                }
            });
        }