Vaadin网格和初始排序数据

Vaadin网格和初始排序数据,vaadin,vaadin7,Vaadin,Vaadin7,我有一个带有索引容器的网格组件,其中数据最初被排序为两列(数据来自Elasticsearch)。如何让Grid知道这种排序,然后在加载Grid时在列标题中显示正确的排序图标 编辑#1 我试图重新定义Gridspublic List getSortOrder()方法以返回正确的排序数据,但它不起作用…您没有显示太多代码,因此我不得不假设您使用的是默认的索引容器,然后添加列,如grid.addColumn(“c1”,String.class)。如果这是真的,那么看起来您无法提供自己的容器实现,因为在

我有一个带有索引容器的网格组件,其中数据最初被排序为两列(数据来自Elasticsearch)。如何让Grid知道这种排序,然后在加载Grid时在列标题中显示正确的排序图标

编辑#1
我试图重新定义Grids
public List getSortOrder()
方法以返回正确的排序数据,但它不起作用…

您没有显示太多代码,因此我不得不假设您使用的是默认的索引容器,然后添加列,如
grid.addColumn(“c1”,String.class)。如果这是真的,那么看起来您无法提供自己的容器实现,因为在提供不同的容器和添加列时,vaadin将抛出异常(还没有时间找出原因):

然后在网格上调用
setSortOrder
方法

import com.vaadin.data.sort.Sort;
import com.vaadin.shared.data.sort.SortDirection;
...
grid.setSortOrder(Sort.by("c3", SortDirection.ASCENDING).then("c2", SortDirection.DESCENDING).build());
这导致列c3先升序,然后c2降序(请参见排序图标附近的数字):

请注意,列标题仍然可以单击,因此排序图标将更改并触发事件,但不会发生任何事情,因为
doSort
被覆盖。您可能需要对此做出反应,以便添加sortListener并请求根据用户选择排序的新数据批:

grid.addSortListener(new SortEvent.SortListener() {
    @Override
    public void sort(SortEvent sortEvent) {
        // request data sorted according to the user selection
    }
});

是的,我知道这一点,但它调用Container.sort()方法,所以它强制Container再次对其进行排序。所以这不是我的意思,因为数据已经从Elasticsearch中进行了排序。太好了,这正是我需要的,而且很有效。我将代码从Container.sort()方法移动到SortListener,并将Container.sort()重写为空。“现在它可以根据需要正常工作了。”大卫马尔科很好,很高兴它最终成功了。Cheershow从列中删除这些数字header@AnujVictor我已经有一段时间没有回答这个问题了,所以我手头不再有快速回答的代码。我怀疑你可以通过CSS来实现这一点,但我建议你为此打开一个新的问题(在搜索以查看是否不存在其他类似的问题之后),使用相关的代码、你尝试了什么以及在哪里遇到了问题。
import com.vaadin.data.sort.Sort;
import com.vaadin.shared.data.sort.SortDirection;
...
grid.setSortOrder(Sort.by("c3", SortDirection.ASCENDING).then("c2", SortDirection.DESCENDING).build());
grid.addSortListener(new SortEvent.SortListener() {
    @Override
    public void sort(SortEvent sortEvent) {
        // request data sorted according to the user selection
    }
});