当前位置: 首页 > 面试题库 >

在CellTable中添加行进行排序

南宫泓
2023-03-14
问题内容

我想在添加新元素时对CellTable中的行进行排序。

要标记UI,请使用UIBinder:

<g:HTMLPanel>
<c:CellTable pageSize='100' ui:field='myTable'/>
<c:SimplePager ui:field='myPager' location='CENTER'/>
</g:HTMLPanel>

在小部件中,我创建了一个表格和分页:

@UiField(provided=true) CellTable<myDTO> myTable;
SimplePager.Resources pagerResources = GWT.create(SimplePager.Resources.class);
myPager = new SimplePager(TextLocation.CENTER, pagerResources, false, 0, true);
myTable = new CellTable<myDTO>();

然后我安装了一个选择模型:

final NoSelectionModel<myDTO> selectionModel = new NoSelectionModel<myDTO>();
selectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
   public void onSelectionChange(SelectionChangeEvent event) {
      clickedObject = selectionModel.getLastSelectedObject();
   }
});

myTable.setPageSize(50);
myTable.setSelectionModel(selectionModel);

并添加了几列:

Column<myDTO, String> column1 = new Column<myDTO, String>(new TextCell()) {
   @Override
   public String getValue(myDTO data) {
      return data.getSomeData1();
   }
};

Column<myDTO, String> column2 = new Column<myDTO, String>(new TextCell()) {
   @Override
   public String getValue(myDTO data) {
      return data.getSomeData2();
   }
};
...
Column<myDTO, String> columnN = new Column<myDTO, String>(new TextCell()) {
   @Override
   public String getValue(myDTO data) {
      return data.getSomeDataN();
   }
};

myTable.addColumn(column1, "name of column1");
myTable.addColumn(column2, "name of column2");
...
myTable.addColumn(columnN, "name of columnN");

接下来,我创建AsyncDataProvider

AsyncDataProvider<myDTO> provider = new AsyncDataProvider<myDTO>() {
   @Override
   // is called when the table requests a new range of data 
   protected void onRangeChanged(HasData<myDTO> display) {

      final int start = display.getVisibleRange().getStart();
      final int lenght = display.getVisibleRange().getLength();

       myService.findAll(new AsyncCallback<List<myDTO>>() {
          public void onFailure(Throwable caught) {
             // exception handling here
          }

          public void onSuccess(List<myDTO> data) {
             updateRowCount(data.size(), true);
             updateRowData(0, data);
          }
      });
   }
 };

 provider.addDataDisplay(myTable);

如果我使用这种方法,那么新行将添加到表的末尾。

添加时,我需要自动对行进行排序。

我该怎么做?


问题答案:

在创建提供程序之后立即创建排序处理程序:

ListHandler<myDTO> sortHandler = new ListHandler<myDTO>(provider.getList());
myTable.addColumnSortHandler(sortHandler);

然后为每个要作为排序依据的列设置一个比较器,并将该列添加到排序列表中,例如:

sortHandler.setComparator(column1, new Comparator<myDTO>() {
    public int compare(myDTO dto1, myDTO dto2) {
        // This is an example, how you compare them depends on the context
        return dto1.getSomeData1().compareTo(dto2.getSomeData1());
    }
});

myTable.getColumnSortList().push(column1);

您可以push()多次调用该方法以按多列排序。您也可以为同一列调用两次以反转其排序顺序(升/降)。



 类似资料:
  • 问题内容: 我创建了一个基本的CellTable并用一些数据填充了它。现在,我想向每一行添加一个clickHandler,但是我不确定如何执行此操作。我已经为整个表格创建了一个clickEvent,但是我希望每一行都有一个。 我可以做一些类似于为每一行添加clickEvent的事情吗? 问题答案: CellTable内置了对处理单击事件的支持。您可以添加单击行时将被调用的a。它将在事件中接收许多项

  • 已经存在一个jtable,我需要动态添加一列,然后为该列设置表格单元格呈现器,单元格呈现器是带有图标的jlabel。我已经做完了。 我的问题是:现在我需要根据表格单元格呈现器中使用的不同图标对列进行排序,那么如何做到这一点呢?谢谢你。

  • 问题内容: 我想按字符串列之一对工作表中的行进行排序。我试图使用Sheet.shiftRows方法实现这一点,但是我无法对此进行管理。它不会在我的方法中切换行的位置。我的代码有什么问题?还是有更好的方法可以按Excel中的任何“字符串”列对行进行排序? 任何想法如何管理工作表中的行排序? 更新 上面的方法自Apache-POI 3.9版本开始起作用。 编辑:添加了缺少的括号-helvio 问题答案

  • 问题内容: 我有以下查询: 该查询的目标是从route_table(由routeid,observation_time,lat和lon列组成)中提取所有lon / lat值,按routeid对其进行分组,并在每个组中按观察时间对它们进行排序。但是,上面的SQL无效,因为observation_time出现在ORDER BY子句中,而不出现在GROUP BY中。当我将observation_time

  • 本文向大家介绍在内部表中添加行并在SAP ABAP中添加标题行,包括了在内部表中添加行并在SAP ABAP中添加标题行的使用技巧和注意事项,需要的朋友参考一下 请注意,不应将标题与内部表一起使用。使用时,in_table2的标头为空。使用循环将其打印如下- 当您具有带有内部表的标头时,不应以相同的方式使用它。您应该使用字段符号进行循环并像这样附加-

  • 我有一个包含甲板排名的枚举。我将这些排名添加到一个数组中。当我使用Arrays.sort使用自定义比较器对数组进行排序时,它没有排序,而是返回了这个: 有什么建议吗?谢谢 下面是代码: