GWT中的单元格表列排序不起作用

时间:2014-06-16 15:37:10

标签: java gwt

我正在尝试对GWT 2.6.0的Cell表中的列进行排序,但它无法正常工作。

这是我的示例代码。

patientsTable.addColumn(NameColumn, messages.surname());
patientsTable.setColumnWidth(0, "100px");
patientsTable.getColumn(0).setSortable(true);

        ListHandler<PatientDTO> columnSortHandler = new ListHandler<PatientDTO>(
                dataProvider.getList());
        columnSortHandler.setComparator(NameColumn,
                new Comparator<PatientDTO>() {

            @Override
            public int compare(PatientDTO o1, PatientDTO o2) {
                if (o1 == o2) {
                      return 0;
                    }

                    if (o1 != null) {
                      return (o2 != null) ? o1.getLastName().compareTo(o2.getLastName()) : 1;
                    }
                    return -1;
            }
            });
        patientsTable.addColumnSortHandler(columnSortHandler);
        patientsTable.getColumnSortList().push(NameColumn);

3 个答案:

答案 0 :(得分:0)

尝试

NameColumn.setSortable(true);

答案 1 :(得分:0)

尝试这样,我给出了工作实例,

  NameColumn.setSortable(true);

  patientsTable.addColumnSortHandler(new ColumnSortEvent.Handler() {
  @Override
  public void onColumnSort(ColumnSortEvent event) {
    final Column a = event.getColumn(); 
    List<PatientDTO> newData = new ArrayList(patientsTable.getVisibleItems());

      Collections.sort(newData, new Comparator<PatientDTO>() {
        public int compare(PatientDTO o1, PatientDTO o2) {
          // code here to sort asc or desc order
          }
      });

    Range range = patientsTable.getVisibleRange();  
    int start = range.getStart(); 
    patientsTable.setRowData(start, newData);  
   }
  });

答案 2 :(得分:0)

List<PatientDTO>中设置数据时,尝试使用您正在使用的patientsTable实例。由于两个列表的不同,似乎没有调用sortHandler。

ListHandler<PatientDTO> columnSortHandler = new ListHandler<PatientDTO>(patientList);