2014-06-16 103 views
0

我想排序GWT 2.6.0單元格表中的列,但它不工作。排序單元格列GWT不工作

這是我的示例代碼。

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); 
+1

_「但它不工作」_。這不是很有用。有什麼問題?你有錯誤/例外嗎?它根本就不排序嗎?它按錯誤順序排序嗎? – Baz

+0

它沒有對列進行排序,也沒有錯誤或異常。 @Baz – Jaidi

+0

順便說一句:請使用'equals()'來比較對象,而不是'=='。 – Baz

回答

0

嘗試

NameColumn.setSortable(true); 
+0

我試過了,但沒有排序。 – Jaidi

+0

您是否添加其他列? –

+0

是的,我喜歡。 'patientsTable.addColumn(firstNameColumn,messages.forename()); \t patientsTable.setColumnWidth(1,「100px」); \t DateCell dateCell = new DateCell(dtf); \t列 dateColumn =新列(dateCell){ \t @覆蓋 \t公共日期的getValue(PatientDTO對象){ \t \t返回object.getBirthday(); \t} \t}; \t patientsTable.addColumn(dateColumn,messages.birthday()); \t patientsTable.setColumnWidth(2,「100px」);'@andrei – Jaidi

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); 
    } 
    }); 
0

嘗試使用您正在而在patientsTable設置你的數據使用相同的List<PatientDTO>實例。看起來sortHandler沒有被調用,因爲這兩個列表中的不同。

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